2012-02-23 82 views
4

可能重复:
OnTouch in MapView only fires the first time为什么MapView onTouchListener只触发一次?

我想检测用户对地图每一个接触,因此我已经注册了一个侦听MapView类的一个实例。然而,这个监听器只会被调用一次,之后我需要关闭应用程序,如果我希望它再次运行。我正在使用OsmDroid。

 mMapView = (MapView) findViewById(R.id.mapview); 

    mMapView.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      System.out.println("OnTouch MapView Listener!"); 
      return false; 
     } 
    }); 

回答

1

您是否尝试过返回true而不是false? Mabey有一个问题,因为你实际上并没有消费触摸事件,因为它在周围徘徊,不再被称为。

+0

是的,我没试过,但它并没有奏效。 – fulupr 2012-02-23 21:00:22

+0

嗡嗡声。也许你可以尝试onTouchEvent?您可以在MapActivity中重写此方法 – 2012-02-23 21:02:44

+0

我不能@Override onTouchEvent方法,因为活动只是扩展了Activity,因此它给我一个错误,指出“MainActivity类型的onTouchEvent(MotionEvent,MapView)方法必须重写超类方法”。 – fulupr 2012-02-23 21:09:13

1

我永远无法让它工作多次。我最终添加了一个无所作为的叠加层,并在覆盖层中放置了一个onTouchEvent()。这个工作

public class OsmdroidDemoMap extends Activity { 

    private MapView mMapView; 
    private MapController mMapController; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.osm_main); 
     mMapView = (MapView) findViewById(R.id.mapview); 
     mMapView.setTileSource(TileSourceFactory.MAPNIK); 
     mMapView.setBuiltInZoomControls(true); 
     mMapView.setMultiTouchControls(true); 
     mMapController = mMapView.getController(); 
     mMapController.setZoom(13); 
     GeoPoint gPt = new GeoPoint(51500000, -150000); 
     mMapController.setCenter(gPt); 
     MapOverlay movl = new MapOverlay(this); 
     mMapView.getOverlays().add(movl); 
    } 

    public class MapOverlay extends org.osmdroid.views.overlay.Overlay { 

     public MapOverlay(Context ctx) {super(ctx);} 

     @Override 
     protected void draw(Canvas c, MapView osmv, boolean shadow) { } 

     @Override 
     public boolean onTouchEvent(MotionEvent e, MapView mapView) { 
      if(e.getAction() == MotionEvent.ACTION_DOWN) 
       Toast.makeText(OsmdroidDemoMap.this, "Touched", Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
    } 
} 
+0

我试过这样做,但是'mMapView.getOverlays()。add(movl);'让我的地图每次触摸时都会倾斜。我怀疑这是因为我也实现了OsmDroid的ItemizedOverlay。 – fulupr 2012-02-24 17:48:28

相关问题