Android:canvas.drawCircle里面有一个椭圆吗?
我正在尝试在MapView上绘制自定义可绘制覆盖图。 我使用一个扩展Drawable的自定义类在画布上绘制圆。然后,我将一个半径变量传递给它,并将其添加到应用于MapView的ItemizeOverlay中 到目前为止,效果还不错,但出于某种原因,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
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