Android MapView-自定义多边形覆盖未在平移或Zomm上正确重置
我正在写一个需要在地图上显示多边形的应用程序。我研究并发现最好的方法是对Overlay类进行子类化并重写draw方法。它工作得很好——但当我滚动或平移时,原始多边形的形状和画布位置不会消失——因此当我平移时,我会不断得到越来越多相同形状的多边形——缩放时也是如此。这是我的自定义覆盖的代码。一旦我得到多边形形状的坐标,我就调用setOverlayType方法——这样draw方法就有了确定多边形绘制位置所需的数据 这可能是愚蠢的事情Android MapView-自定义多边形覆盖未在平移或Zomm上正确重置,android,overlay,Android,Overlay,我正在写一个需要在地图上显示多边形的应用程序。我研究并发现最好的方法是对Overlay类进行子类化并重写draw方法。它工作得很好——但当我滚动或平移时,原始多边形的形状和画布位置不会消失——因此当我平移时,我会不断得到越来越多相同形状的多边形——缩放时也是如此。这是我的自定义覆盖的代码。一旦我得到多边形形状的坐标,我就调用setOverlayType方法——这样draw方法就有了确定多边形绘制位置所需的数据 这可能是愚蠢的事情 public class myOverLay extends Ov
public class myOverLay extends Overlay {
public final int OVERLAY_TYPE_NORMAL = 0;
public final int OVERLAY_TYPE_SCALED = 1;
private GeoPoint pVerts[];
private GeoPoint pCenter;
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private Path path = new Path();
private Context mContext;
private int overlayType;
private String pName = "";
public myOverLay(Context context) {
super();
this.mContext=context;
}
public void setOverlayType(GeoPoint[] polyVerts, GeoPoint polyCenter, int overlayT, String pn) {
this.pVerts = polyVerts;
this.pCenter = polyCenter;
this.overlayType = overlayT;
this.pName = pn;
}
@Override
public void draw(Canvas canvas, MapView mapview, boolean shadow)
{
super.draw(canvas,mapview,false);
Projection projection = mapview.getProjection();
Point pVert = new Point(0,0);
if(this.overlayType==0)
paint.setColor(android.graphics.Color.argb(50, 255, 0, 0));
else
paint.setColor(android.graphics.Color.argb(50, 255, 255, 0));
paint.setStrokeWidth(2);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);
path.setFillType(Path.FillType.EVEN_ODD);
projection.toPixels(this.pVerts[0],pVert);
path.moveTo(pVert.x, pVert.y);
for(int x=0;x<=5;x++)
{
projection.toPixels(this.pVerts[x],pVert);
path.lineTo(pVert.x, pVert.y);
}
path.close();
Log.v("OVERLAY", "Draw Method Called");
canvas.drawPath(path, paint);
if(this.overlayType==0) //Icon
{
Point centerPt = new Point();
projection.toPixels(this.pCenter, centerPt);
Bitmap bmap=BitmapFactory.decodeResource(this.mContext.getResources(), R.drawable.my_image);
bmap = Bitmap.createScaledBitmap(bmap,20, 40, true);
canvas.drawBitmap(bmap, centerPt.x-10, centerPt.y-50, null);
}
}
}
公共类myOverLay扩展覆盖{
公共最终整数叠加类型法线=0;
公共最终整数叠加类型缩放=1;
私人地质点pVerts[];
私人地质点中心;
私有油漆=新油漆(油漆.防油漆别名标志);
私有路径路径=新路径();
私有上下文;
私有整型覆盖类型;
私有字符串pName=“”;
公共myOverLay(上下文){
超级();
this.mContext=上下文;
}
公共void setOverlayType(地质点[]多顶点、地质点多中心、整型叠加、字符串pn){
this.pVerts=多顶点;
this.pCenter=polyCenter;
this.overlayType=overlayT;
this.pName=pn;
}
@凌驾
公共空白绘制(画布、地图视图、地图视图、布尔阴影)
{
super.draw(画布、地图视图、假);
Projection=mapview.getProjection();
点pVert=新点(0,0);
if(this.overlytype==0)
setColor(android.graphics.Color.argb(50255,0,0));
其他的
setColor(android.graphics.Color.argb(50255,255,0));
油漆。设置行程宽度(2);
绘制.设置样式(绘制.样式.填充和笔划);
paint.setAntiAlias(真);
path.setFillType(path.FillType.偶数/奇数);
投影.toPixels(this.pVerts[0],pVert);
路径移动到(pVert.x,pVert.y);
对于(int x=0;x回答我自己的问题-我在draw方法中将Paint和Path变量从类变量移动到局部变量-这确实很愚蠢-map现在可以很好地随多边形平移、缩放和滚动