OSMDROID - longPressHelper 仅在第一次用于添加标记时触发
OSMDROID - longPressHelper only fires the first time when it is used to add a marker
我正在使用 osmdroid 并实现了 MapEventsReceiver、MapEventsOverlay 和 LongPressHelper,以便在用户按住地图时添加新标记。这只适用于第一次和第一次。
如果我从我的 longPressHelper 中删除 addMarker(p);
那么它每次都会触发。
有没有人知道为什么会这样?
代码:
mapviewInit - 在 onCreate 中调用
私人无效 mapviewInit() {
mapview = (MapView) findViewById(R.id.mapview);
mapview.setTileSource(TileSourceFactory.MAPNIK);
mapview.setBuiltInZoomControls(true);
mapview.setMultiTouchControls(true);
IMapController mapController = mapview.getController();
mapController.setZoom(16);
GeoPoint startPoint = new GeoPoint(48.8583, 2.2944);
mapController.setCenter(startPoint);
MapEventsReceiver meReceiver = new MapEventsReceiver() {
@Override
public boolean singleTapConfirmedHelper(GeoPoint p) {
return false;
}
@Override
public boolean longPressHelper(GeoPoint p) {
Toast toast = Toast.makeText(getApplicationContext(), "DEBUGDEBUGDEBUG", Toast.LENGTH_LONG);
toast.show();
addMarker(p);
return true;
}
};
addMarker - 由 LongPressHelper 调用
public void addMarker(GeoPoint geoPoint) {
Drawable dr = getResources().getDrawable(R.drawable.icn_crosshair_red);
Bitmap bitmap = ((BitmapDrawable) dr).getBitmap();
Drawable d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 100, 100, true));
mapview.getOverlays().clear();
mapview.invalidate();
selectedPosMarker = new Marker(mapview);
selectedPosMarker.setPosition(geoPoint);
selectedPosMarker.setInfoWindow(null);
selectedPosMarker.setIcon(d);
selectedPosMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
mapview.getOverlays().add(selectedPosMarker);
mapview.invalidate();
}
我假设您在某处添加了 MapEventsOverlay,在您未提供的部分代码中。
问题是您在 addMarker 中删除了它! :
mapview.getOverlays().clear();
所以当然不会出现第二次长按反应...
不要在同一个方法中调用两次mapview.invalidate(),既无用又费时。
我正在使用 osmdroid 并实现了 MapEventsReceiver、MapEventsOverlay 和 LongPressHelper,以便在用户按住地图时添加新标记。这只适用于第一次和第一次。
如果我从我的 longPressHelper 中删除 addMarker(p);
那么它每次都会触发。
有没有人知道为什么会这样?
代码:
mapviewInit - 在 onCreate 中调用 私人无效 mapviewInit() {
mapview = (MapView) findViewById(R.id.mapview);
mapview.setTileSource(TileSourceFactory.MAPNIK);
mapview.setBuiltInZoomControls(true);
mapview.setMultiTouchControls(true);
IMapController mapController = mapview.getController();
mapController.setZoom(16);
GeoPoint startPoint = new GeoPoint(48.8583, 2.2944);
mapController.setCenter(startPoint);
MapEventsReceiver meReceiver = new MapEventsReceiver() {
@Override
public boolean singleTapConfirmedHelper(GeoPoint p) {
return false;
}
@Override
public boolean longPressHelper(GeoPoint p) {
Toast toast = Toast.makeText(getApplicationContext(), "DEBUGDEBUGDEBUG", Toast.LENGTH_LONG);
toast.show();
addMarker(p);
return true;
}
};
addMarker - 由 LongPressHelper 调用 public void addMarker(GeoPoint geoPoint) {
Drawable dr = getResources().getDrawable(R.drawable.icn_crosshair_red);
Bitmap bitmap = ((BitmapDrawable) dr).getBitmap();
Drawable d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 100, 100, true));
mapview.getOverlays().clear();
mapview.invalidate();
selectedPosMarker = new Marker(mapview);
selectedPosMarker.setPosition(geoPoint);
selectedPosMarker.setInfoWindow(null);
selectedPosMarker.setIcon(d);
selectedPosMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
mapview.getOverlays().add(selectedPosMarker);
mapview.invalidate();
}
我假设您在某处添加了 MapEventsOverlay,在您未提供的部分代码中。 问题是您在 addMarker 中删除了它! :
mapview.getOverlays().clear();
所以当然不会出现第二次长按反应...
不要在同一个方法中调用两次mapview.invalidate(),既无用又费时。