マップ上にポリゴンを表示する必要があるアプリを作成しています。調査した結果、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);
}
}
}