我一直在使用OSMdroid我如何在mapview中實現自己的雙擊?
我有兩個縮放級別的地圖圖塊,即12和15
現在一般的雙擊放大1級
想什麼IM的MapView離線地圖上要做的就是把setZoomLevel()
當作15後用戶雙擊在地圖上,
這可能嗎?
我試着用onGestureListener
,但不知何故,它不工作
任何提示或在這個方向或樣本代碼的線索將是一個很大的幫助,感謝
我一直在使用OSMdroid我如何在mapview中實現自己的雙擊?
我有兩個縮放級別的地圖圖塊,即12和15
現在一般的雙擊放大1級
想什麼IM的MapView離線地圖上要做的就是把setZoomLevel()
當作15後用戶雙擊在地圖上,
這可能嗎?
我試着用onGestureListener
,但不知何故,它不工作
任何提示或在這個方向或樣本代碼的線索將是一個很大的幫助,感謝
我對Osmdroid MapView有類似的要求,因爲我不希望它做'在雙擊位置的中心並放大'默認功能。我想讓它彈出一個吐司。在我的情況下,我在MapView上覆蓋了一層,所以我只是在覆蓋層的onDoubleTap方法中使用雙擊。爲了達到您的目的,您可以添加一個覆蓋層,它只能提供自己的雙擊功能。
因此,在您的onCreate結束時,您可以添加疊加層。這個小應用程序似乎證明你想要什麼 - (你需要添加條件代碼檢查縮放級別和其他修補):
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);
mMapController = mMapView.getController();
mMapController.setZoom(13);
GeoPoint gPt = new GeoPoint(51500000, -150000);
mMapController.setCenter(gPt);
DummyOverlay dumOverlay = new DummyOverlay(this);
List<Overlay> listOfOverlays = mMapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(dumOverlay);
}
public class DummyOverlay extends org.osmdroid.views.overlay.Overlay {
public DummyOverlay(Context ctx) {
super(ctx); // TODO Auto-generated constructor stub
}
@Override
protected void draw(Canvas c, MapView osmv, boolean shadow) {}
@Override
public boolean onDoubleTap(MotionEvent e, MapView mapView) {
// This stops the 'jump to, and zoom in' of the default behaviour
int zoomLevel = mMapView.getZoomLevel();
mMapController.setZoom(zoomLevel + 3);
return true;// This stops the double tap being passed on to the mapview
}
}
你可以用它的事件覆蓋變焦控制,對於您需要定義成XML佈局,或者你從的MapView獲得變焦控制
ZoomControls zoomControls = (ZoomControls)findViewById(R.id.zoomControl);
View zoomOut = zoomControls.getChildAt(0);
zoomOut.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_out_icon));
zoomOut.setPadding(5, 5, 5, 5);
View zoomIn = zoomControls.getChildAt(1);
zoomIn.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_in_icon));
zoomIn.setPadding(5, 5, 5, 5);
zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomIn();
mapView.invalidate();
}
});
zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomOut();
mapView.invalidate();
}
});
現在你可以實現自己的變焦控制
好吧,我已經實現了縮放控件,但雙擊必須實施因爲它的任何用戶的傾向,所以不能忽視它的UX – 2012-01-04 11:46:44
檢查此答案http://stackoverflow.com/a/8168953/760489 – Pratik 2012-01-04 11:53:27
我明白你想說什麼,但mapview已經有一個默認的雙擊實現,我想改變 – 2012-01-04 11:57:09
如果您需要管理一個MapView的雙龍頭,我建議你檢查這個線程:
android maps: How to Long Click a Map?
你可以看到我的回答和我如何適應mapview-overlay-manager。
在最新OSMdroid庫4.0具有內置的自動雙擊放大,但沒有比使用變焦控制更好的了。
DummyOverlay是一個完整的「地圖大小」透明覆蓋?我一直在嘗試檢測DirectedLocationOverlay標記上的點擊 - 這是否意味着我必須實現「是標記內部的點擊」? – 2013-09-16 12:10:25