2011-04-18 27 views
0

我正在嘗試在MapView上繪製自定義可繪製覆蓋圖。 我使用擴展Drawable的自定義類在畫布上繪製圓。然後,我將一個半徑變量傳遞給它,並將其添加到應用於MapView的ItemizedOverlay中。Android:canvas.drawCircle裏面有一個橢圓?

到目前爲止,它工作得非常好,但由於某種原因,canvas.drawCircle方法正在繪製一個透明的圓,其內部看起來像一個橢圓,而且我不能,對於我來說,找出是什麼原因造成的。我確實希望這個圓是透明的,但我不希望這個橢圓的東西在裏面。

這是自定義繪製對象類:

import android.graphics.Canvas; 
import android.graphics.ColorFilter; 
import android.graphics.Paint; 
import android.graphics.drawable.Drawable; 
public class PileDrawable extends Drawable { 
    private static final Paint paint = new Paint(); 
    int rad; 
    public PileDrawable(int radius) { 
      paint.setARGB(100, 0, 255, 0); 
      paint.setAntiAlias(false); 
      paint.setStyle(Paint.Style.FILL); 
      rad=radius; 
    } 
    @Override 
    public void draw(Canvas canvas) { 

      canvas.drawCircle(0, 0, rad, paint); 

    } 
    @Override 
    public int getOpacity() { 
      return 0; 
    } 
    @Override 
    public void setAlpha(int alpha) { 

    } 
    @Override 
    public void setColorFilter(ColorFilter cf) { 

    } 
} 

這是什麼樣的樣子,無視我缺乏MS油漆技能...

http://img222.imageshack.us/img222/4356/circleellipse.png

我有一個揮之不去感覺當我將邊界應用於Drawable時會出現問題。

PileDrawable pd = new PileDrawable((int)(mapView.getProjection().metersToEquatorPixels(Radius) * (1/ Math.cos(Math.toRadians(point.getLatitudeE6()))))); 
    pd.setBounds(0,0,pd.getIntrinsicWidth(),pd.getIntrinsicHeight()); //HERE? 

那麼,有什麼想法嗎?

回答

1

它可能有點晚,但這裏是我如何在地圖上作爲覆蓋物繪製一個圓圈。希望這可以幫助未來的人

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) 
{ 
     Projection proj = mapView.getProjection(); 
     GeoPoint loc = new GeoPoint(geo.getLat(), geo.getLng()); 

     Point point = new Point(); 
     proj.toPixels(loc, point); 
     float rad = (float) (proj.metersToEquatorPixels(radius) * (1/Math.cos(Math.toRadians(loc.getLatitudeE6()/1000000)))); 

     Paint circle = new Paint(); 
     circle.setColor(colour); 
     circle.setAlpha(30); 
     circle.setAntiAlias(true); 
     circle.setStyle(Style.FILL); 

     canvas.drawCircle(point.x, point.y, rad, circle); 

     super.draw(canvas, mapView, shadow); 

} 

和作品像魅力。我不知道爲什麼橢圓是繪製的,因爲代碼中沒有繪製橢圓,但我猜測它可能是整數值轉換的原因,而不是浮點值轉換,而您初始化PileDrawable