为什么MapView onTouchListener只被触发一次?

时间:2012-02-23 20:56:59

标签: android android-mapview ontouchlistener osmdroid

  

可能重复:
  OnTouch in MapView only fires the first time

我想检测用户对地图的每次触摸,因此我已经为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;
        }
    });

2 个答案:

答案 0 :(得分:1)

您是否尝试过返回true而不是false? Mabey存在一个问题,因为你实际上并没有消耗触摸事件,因为它已经徘徊不去,因此无法再被调用。

答案 1 :(得分: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;
        }
    }
}