0

私は自分のアプリケーションにグーグルマップを実装しました。ItemizedOverlayを拡張してオーバーレイを追加する独自のオーバーレイクラスを作成しました。同じオーバーレイクラスを使用して、地図上の現在の場所を表示するオーバーレイも追加します。

このオーバーレイクラスのonTouchEventは、タッチが行われた場所を判別し、オーバーレイオブジェクトをマップ上の任意の場所に移動できるようにするために使用されます。ただし、これはいくつかの問題を引き起こしています。現在地へのポインタも移動可能になります。この現在位置ポインタを修正したいと思います。

このために、以前に作成したカスタムオーバーレイを拡張する新しいクラスMyNewLocationOverLayを作成しています。私の計画は、onTouchEventメソッドをオーバーライドし、他のオーバーレイにタッチした場合はsuper.onTouchEventを返し、mylocationオーバーレイにタッチした場合はtrueを返すことです。クリックされたオーバーレイを確認するにはどうすればよいですか。私は試した:

public class myOverlayclass extends OverLayClass {

    public myOverlayclass(Drawable marker) {
        super(marker);

        // TODO Auto-generated constructor stub
    }

    public boolean onTouchEvent(MotionEvent motionEvent, MapView mapView) {
        System.out.println("The overlays are*************"+mapView.getOverlays()); //this lists the overlays
        return super.onTouchEvent(motionEvent, mapView);
    }
}

これを比較して、どのオーバーレイがタッチされたかを見つける必要があります。オーバーレイを比較するにはどうすればよいですか。

if (mapView.getOverlays().contains(mYLocationOverLay))

動作しないようです。

4

2 に答える 2

0

onTouchEventメソッド内で、ヒットテストを実行して、どのオーバーレイがタッチされたかを確認しました。そしてそれをmyLocationGeoPointと比較しました。

for(OverlayItem item : overlayItems) 
                    {
                        Point p = new Point();

                        mapView.getProjection().toPixels(item.getPoint(), p);
                        item.setMarker(marker);
                        boolean isHit = hitTest(item, marker, x - p.x, y - p.y);

                        if(isHit && !(item.getPoint().equals(mylocationgeoPoint))) //this is where I'm checking if I hit my current locating geopoint
                        {
                          //NOW THE OVERLAYS ARE MOVABLE
                            System.out.println("-------------------------inside isHit -----------------------"+item.getPoint() +"my locating geo point is" +mylocationgeoPoint);
.
.
. } 
}

それが誰かを助けることを願っています!

于 2012-07-10T06:08:19.480 に答える
0

ほとんどタッチされた位置はオーバーレイ位置の正確なコピーではないため、.qualsまたは==を使用することはできません。たとえば、計算に+-Xを追加して機能させます。

for(Overlay item : mapView.getOverlays()) 
    {

            MarkerOverlay ov = (MarkerOverlay) item;



            if (Math.abs(ov.getGlobalGeoPoint().getLongitudeE6() - geoPoint.getLongitudeE6()) <50 && 
                    Math.abs(ov.getGlobalGeoPoint().getLatitudeE6()-geoPoint.getLatitudeE6())<50) {
                //do ur work here


                return true;
            }
            else{


            }


    } 
于 2012-10-22T13:37:16.290 に答える