gpt4 book ai didi

android - 覆盖 osmdroid MapView 的默认平移/移动

转载 作者:行者123 更新时间:2023-11-29 01:40:49 24 4
gpt4 key购买 nike

我有 mapView 并且我以编程方式处理触摸事件。

问题是:如果mapview是ZoomOut到最大,则平移很小而且很慢,而符合mapView是ZoomIn,则平移更大更快。换句话说:zoomIN 越大,平移 Action 越大。

我怎样才能使平移移动不相应地缩放,所以每次我移动 map 时,无论缩放级别如何,它都会移动相同的距离?还是有另一种方法可以覆盖 mapview 中的平移?

这是我的安卓客户端

private double savedTouchedX = -1;
private double savedTouchedY = -1;
....

mapView.setOnTouchListener(new MapView.OnTouchListener() {

@Override
public boolean onTouch(View arg0, MotionEvent event) {
int action = event.getAction();
final Projection pj = mapView.getProjection();
GeoPoint eventPosition = (GeoPoint) pj.fromPixels((int)event.getX(), (int)event.getY());

switch(action)
{
case MotionEvent.ACTION_DOWN:
savedTouchedX = eventPosition.getLongitude();
savedTouchedY = eventPosition.getLatitude();
break;
case MotionEvent.ACTION_MOVE:
doPanning(eventPosition, mapView);
break;
case MotionEvent.ACTION_UP:
doPanning(eventPosition, mapView);
savedTouchedX = -1;
savedTouchedY = -1;
break;
default:
break;
}
return true;
}
});

//move mapView
private boolean doPanning(GeoPoint e, MapView mapView)
{
GeoPoint mapCenter = (GeoPoint) mapView.getMapCenter();
GeoPoint panToCenter = new GeoPoint((int)(mapCenter.getLatitudeE6() + (e.getLatitude() - savedTouchedY) * 1E5),
(int)(mapCenter.getLongitudeE6() - (e.getLongitude() - savedTouchedX) * 1E5));
mapView.getController().setCenter(panToCenter);
savedTouchedX = e.getLongitude();
savedTouchedY = e.getLatitude();
return true;
}

最佳答案

您必须将您的 MotionEvent 位置(在屏幕坐标中)转换为 map 位置。这根本就不是同一个坐标系!

final Projection pj = mapView.getProjection();
GeoPoint eventPosition = (GeoPoint) pj.fromPixels((int)event.getX(), (int)event.getY());

关于android - 覆盖 osmdroid MapView 的默认平移/移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24812991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com