найти, какой оверлей на моей карте был нажат

Я реализовал карты Google в своем приложении. Я написал свой собственный класс наложения, расширяющий ItemizedOverlay для добавления наложений. Используя тот же класс наложения, я также добавляю наложение, чтобы показать мое текущее местоположение на карте.

OnTouchEvent этого класса наложения используется для определения места касания и возможности перемещения объекта наложения в любое место на карте. Однако это вызывает некоторые проблемы. Указатель моего текущего местоположения также становится подвижным. Я хочу исправить этот указатель текущего местоположения.

Для этого я создаю новый класс MyNewLocationOverLay, который расширяет ранее созданный пользовательский оверлей. Мой план состоит в том, чтобы переопределить метод onTouchEvent и вернуть super.onTouchEvent в случае касания других оверлеев и вернуть true при касании оверлея mylocation. Как узнать, какой оверлей был нажат. Я пытался:

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))

не работает.


person user1351659    schedule 09.07.2012    source источник


Ответы (2)


В методе 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);
.
.
. } 
}

Надеюсь, это поможет кому-то!

person user1351659    schedule 10.07.2012

Позиция, к которой в основном прикасаются, не будет точной копией позиции оверлея, поэтому вы не можете использовать .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{


            }


    } 
person MSaudi    schedule 22.10.2012