4

可能重复:
MapView 中的 OnTouch 仅在第一次触发

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

2 回答 2

1

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

于 2012-02-23T20:58:39.957 回答
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;
        }
    }
}
于 2012-02-23T22:11:23.917 回答