Android MapView-自定义多边形覆盖未在平移或Zomm上正确重置

Android MapView-自定义多边形覆盖未在平移或Zomm上正确重置,android,overlay,Android,Overlay,我正在写一个需要在地图上显示多边形的应用程序。我研究并发现最好的方法是对Overlay类进行子类化并重写draw方法。它工作得很好——但当我滚动或平移时,原始多边形的形状和画布位置不会消失——因此当我平移时,我会不断得到越来越多相同形状的多边形——缩放时也是如此。这是我的自定义覆盖的代码。一旦我得到多边形形状的坐标,我就调用setOverlayType方法——这样draw方法就有了确定多边形绘制位置所需的数据 这可能是愚蠢的事情 public class myOverLay extends Ov

我正在写一个需要在地图上显示多边形的应用程序。我研究并发现最好的方法是对Overlay类进行子类化并重写draw方法。它工作得很好——但当我滚动或平移时,原始多边形的形状和画布位置不会消失——因此当我平移时,我会不断得到越来越多相同形状的多边形——缩放时也是如此。这是我的自定义覆盖的代码。一旦我得到多边形形状的坐标,我就调用setOverlayType方法——这样draw方法就有了确定多边形绘制位置所需的数据

这可能是愚蠢的事情

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现在可以很好地随多边形平移、缩放和滚动