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 回答