2013-01-13 1 views
0

ShapeDrawable을 확장/하위 클래스로 만들려고합니다. 결과는 정말 혼란 스럽습니다. 내 간단한 코드는 작은 점과 작은 삼각형을 만들어야합니다. 실제로 이러한 모양은지도 뷰에 표시됩니다.지도 뷰에는 그 모양이 그려집니다. 그러나 다소 다른 모양을 가진 두 번째 삼각형도 나타나기 때문에 왜 그런지 모르겠습니다. ShapeDrawable 하위 클래스가 여분의 삼각형을 만드는 이유는 무엇입니까?ShapeDrawable Subclass는 Spooky Ghost 삼각형에 의해 괴롭힘을받습니다

예 SCREENSHOT --- >>http://www.activemetrics.com/DrawableProb.png

private class CustomDrawable extends ShapeDrawable 
    { 
     public CustomDrawable() //GeoPoint point, MapView mapView) 
     { 
     } 

     public void draw(Canvas canvas) 
     { 
      canvas.drawCircle(0, 0, 2/*radius*/, getPaint()); 
      Paint paint = new Paint(); 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeWidth(2); 
      paint.setColor(Color.RED); 
      Path path = new Path(); 
      path.reset(); 
      path.moveTo(0, -10); 
      path.lineTo(5, 0); 
      path.lineTo(-5, 0); 
      path.close(); 
      path.offset(10, 40); 
      canvas.drawPath(path, paint); 
     } 
    } 

답변

0

나는 어쩌면이 질문은 너무 어려운 것 같아요. 아마도이 하위 클래스 외부의 어떤 부분에서 잘못된 부분이있을 수 있습니다. (하지만 유령 삼각형이 여기서 그림 논리를 제거함으로써 사라지는 것은 이상한 일입니다.) 어쨌든, 저는 mapview에 하나의 오버레이를 추가 한 다음 draw 메소드를 오버로드하여 더 나은 경험을 얻었습니다 ...

private class MapOverlay extends com.google.android.maps.Overlay 
    { 
     @Override 
     public boolean draw(Canvas canvas, MapView mapView, 
     boolean shadow, long when) 
     { 
      super.draw(canvas, mapView, shadow); 

      Bitmap bmp = BitmapFactory.decodeResource(
        getResources(), R.drawable.ic_launcher); 

      //---translate the GeoPoint to screen pixels--- 
      Point screenPts1 = new Point(); 
      mapView.getProjection().toPixels(p1, screenPts1); 

      //---translate the GeoPoint to screen pixels--- 
      Point screenPts2 = new Point(); 
      mapView.getProjection().toPixels(p2, screenPts2); 

      //---add the first marker--- 
      canvas.drawBitmap(bmp, screenPts1.x - bmp.getWidth()/2, 
            screenPts1.y - bmp.getHeight()/2, null); 

(... 중략)