Android:canvas.drawCircle里面有一个椭圆?

时间:2011-04-18 21:12:31

标签: android canvas android-mapview geometry

我正在尝试在MapView上绘制自定义Drawable叠加层。 我使用一个自定义类来扩展Drawable以在画布上绘制圆圈。然后我将一个radius变量传递给它,并将其添加到ItemizedOverlay中,并将其应用于MapView。

到目前为止,它的效果非常好,但是出于某种原因,canvas.drawCircle方法正在绘制一个透明的圆圈,里面看起来像一个椭圆,我不能,对于我的生活,是什么造成了它。我确实希望圆圈是透明的,但我不希望它内部有这个椭圆形物。

这是自定义Drawable类:

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 个答案:

答案 0 :(得分: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