我正在尝试在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?
那么,有什么想法吗?
答案 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