Android MapView перестает генерировать (или получать?) События - PullRequest
2 голосов
/ 02 октября 2010

Я работаю над классом Android, который расширяет MapActivity.Я установил OnTouchListener, и все работает нормально для первого MotionEvent.После первого MotionEvent система прекращает генерировать MotionEvents или получать их или оба.Кто-нибудь знает, что я должен делать, чтобы получать MotionEvents?Спасибо.

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);

    mapView.setOnTouchListener(new View.OnTouchListener( ) {    
        @Override public boolean onTouch(View v, MotionEvent event) {
            Log.i(TAG, "onTouch called");

            switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.i(TAG, "ACTION_DOWN: x = " + event.getX() + ", y = " + event.getY());
                break;
            case MotionEvent.ACTION_UP:
                Log.i(TAG, "ACTION_UP: x = " + event.getX() + ", y = " + event.getY());
                break;
            case MotionEvent.ACTION_CANCEL:
                Log.i(TAG, "ACTION_CANCEL: x = " + event.getX() + ", y = " + event.getY());
                break;
            case MotionEvent.ACTION_OUTSIDE:
                Log.i(TAG, "ACTION_OUTSIDE: x = " + event.getX() + ", y = " + event.getY());
                break;
            case MotionEvent.ACTION_MOVE:
                Log.i(TAG, "ACTION_MOVE: x = " + event.getX() + ", y = " + event.getY());
                break;
            }

            v.onTouchEvent(event);
            return true;   // I also tried return false here, that didn't fix anything
        }
    });

1 Ответ

2 голосов
/ 02 октября 2010

Не следует помещать обработку событий в метод onCreate, поскольку метод onCreate выполняется при запуске. Чтобы включить касание или вкладку для вашей карты, вы должны использовать Map Overlay и здесь, Использование Google Maps в Android .

Написать вам класс MapOverlay внутри вас. MapActivity:

class MapOverlay extends com.google.android.maps.Overlay
    {
        @Override
        public boolean draw(Canvas canvas, MapView mapView, 
        boolean shadow, long when) 
        {
           //...
        }

        @Override
        public boolean onTouchEvent(MotionEvent event, MapView mapView) 
        {   
            //---when user lifts his finger---

            return false;
        }        
    }

... а затем просто добавьте оверлей к MapActivity в вашем методе onCreate:

MapOverlay mapOverlay = new MapOverlay();
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);        
mapView.invalidate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...