-1

最近、オーバーレイ クラスを作成し、パスを使用して描画することで、自国の周りにカスタム ポリゴンを描画しました。私はマップの多くのセクターを持っています。各セクターは分割され、オーバーレイ クラスで色で塗りつぶされています。ただし、ontap 関数を使用すると、最後のオーバーレイ アイテムの ontap 関数だけが呼び出されます。

オーバーレイの境界を設定しなかったためだと思いますか? 以下は私のオーバーレイコードです

public class SectorOverlay  extends  Overlay{

CustomPolygon customPolygon =null;
Context context;

public SectorOverlay(Context context, CustomPolygon customPolygon) {
    this.context=context;
    this.customPolygon =customPolygon;
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) 
{
    shadow=false;

    Paint paint = new Paint();
    paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setStrokeWidth(2);
    paint.setColor(0x10000000);     
    paint.setStyle(Paint.Style.FILL_AND_STROKE);
    paint.setAntiAlias(true);
    Point point1_draw = new Point();        

    if(customPolygon!=null)
    {

            Path path = new Path();
            path.setFillType(Path.FillType.EVEN_ODD);
            for(int n=0;n<customPolygon.getCorrdinateList().size();n++)
            {

                GeoPoint sector1 = new GeoPoint((int)(customPolygon.getCorrdinateList().get(n).getLatitude()*1e6), (int)((customPolygon.getCorrdinateList().get(n).getLongitude())*1e6));
                if(n==0){
                    mapView.getProjection().toPixels(sector1, point1_draw);
                    path.moveTo(point1_draw.x,point1_draw.y);
                }else
                {
                    mapView.getProjection().toPixels(sector1, point1_draw);
                    path.lineTo(point1_draw.x,point1_draw.y);
                }
            }

            path.close();
            canvas.drawPath(path, paint);



    }

}
@Override
public boolean onTap(GeoPoint p, MapView mapView) {


    new CommonOpearation().showToast(context, customPolygon.getName());


return  true;
}
}
4

1 に答える 1

2

Overlay一番上にあるので、「最後」と呼ばれています。 MapViewからオーバーレイを描画しますが、イベントがある場合、最後に描画0..endされたものが上にあるため、最初にイベントを取得ますreturn trueOverlay.onTap.処理されるため、オーバーレイを後で呼び出す必要はありません。したがって、イベント ハンドラは順番に呼び出されます。Overlay.onTouchEventend..0

私は使用しませんでしonTapたが、CommonsWare at Android - Map overlay onTouchEvent / onTap howto によると? 使用する場合は、境界/描画領域のみをItemizedOverlay取得する必要があります。画面上の任意のタッチポイントに対して共通の とが呼び出されるonTap可能性は確かにあります。この場合、(x,y) を逆に適用して (lon,lat) を取得することでを見つけることができます。または使用します(繰り返しますが、これについては聞いたことがありません)。onTaponTouchEventsGeoPointgetProjectionMapViewonTap

オーバーレイの描画されたポリゴンでヒット テストを行う必要がある場合は、ポイントが (必ずしも凸面ではない) ポリゴン内にあるかどうかを判断するのに役立つものがあります: http://verkkoopetus.cs.utu.fi/vhanke/トラクラ/PointInPolygon.html

于 2012-07-26T22:03:00.117 に答える