为什么 MapView onTouchListener 只触发一次?

发布于 2025-01-08 09:02:36 字数 612 浏览 3 评论 0原文

可能的重复:
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;
        }
    });

Possible Duplicate:
OnTouch in MapView only fires the first time

I want to detect every touch made by the user to the map and hence I have registered a listener for an instance of MapView. However, this listener only get called once, after that I need to close the application if I want it to work again. I am using 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;
        }
    });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苏大泽ㄣ 2025-01-15 09:02:36

您是否尝试过返回 true 而不是 false?也许存在一个问题,因为您实际上并没有消耗它徘徊的触摸事件,这会阻止再被调用。

Have you tried returning true instead of false? Mabey there is an issue since your not actually consuming the touch event that it's lingering around which is prevent anymore from being called.

北风几吹夏 2025-01-15 09:02:36

我也无法让它多次工作。我最终添加了一个不执行任何操作的覆盖层,并在覆盖层中放置了一个 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;
        }
    }
}

I could never get it to work more than once either. I ended up adding an overlay which does nothing and putting an onTouchEvent() in the overlay. This worked

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;
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文