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