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

Android:canvas.drawCircle里面有一个椭圆吗?,android,canvas,android-mapview,geometry,Android,Canvas,Android Mapview,Geometry,我正在尝试在MapView上绘制自定义可绘制覆盖图。 我使用一个扩展Drawable的自定义类在画布上绘制圆。然后,我将一个半径变量传递给它,并将其添加到应用于MapView的ItemizeOverlay中 到目前为止,效果还不错,但出于某种原因,canvas.drawCircle方法是用一个看起来像椭圆的东西画一个透明的圆,而我不能,就我个人而言,找出是什么导致了它。我确实希望圆是透明的,但我不希望它里面有椭圆 以下是自定义可绘制类: import android.graphics.Canva

我正在尝试在MapView上绘制自定义可绘制覆盖图。 我使用一个扩展Drawable的自定义类在画布上绘制圆。然后,我将一个半径变量传递给它,并将其添加到应用于MapView的ItemizeOverlay中

到目前为止,效果还不错,但出于某种原因,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绘画技巧

我有一种挥之不去的感觉,即当我将边界应用于可绘制对象时,问题就会出现

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?

那么,有什么想法吗?

可能有点晚了,但下面是我如何在地图上画一个圆圈作为覆盖。希望这对未来的人们有所帮助

@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