2010-10-02 4 views
2

Je travaille sur un cours Android qui étend MapActivity. J'ai mis le OnTouchListener et tout fonctionne bien pour le premier MotionEvent. Après le premier MotionEvent, le système arrête de générer des MotionEvents ou de les recevoir, ou les deux. Est-ce que quelqu'un sait ce que je dois faire pour continuer à recevoir MotionEvents? Merci.Android MapView arrête de générer (ou de recevoir?) Des événements

@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 
     } 
    }); 

Répondre

2

Vous ne devriez pas mettre la gestion des événements dans la méthode onCreate car la méthode onCreate est executet au démarrage. Pour activer le toucher ou la tabulation pour votre carte, vous devez utiliser Map Overlay et ici, Using Google Maps in Android.

Write MapOverlay classe en vous 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; 
     }   
    } 

... et puis juste ajouter la superposition à la MapActivity, dans votre méthode onCreate:

MapOverlay mapOverlay = new MapOverlay(); 
List<Overlay> listOfOverlays = mapView.getOverlays(); 
listOfOverlays.clear(); 
listOfOverlays.add(mapOverlay);   
mapView.invalidate(); 
Questions connexes