gpt4 book ai didi

Android:如何在 MapView 上捕获平移的结束

转载 作者:行者123 更新时间:2023-11-29 14:07:39 25 4
gpt4 key购买 nike

你能告诉我如何捕获 MapView 平移的结束吗?一开始,我以为我可以使用 MotionEvent.ACTION_UP。然而,当我快速移动触摸时,平移动画仍在进行中,而 ACTION_UP 事件之前已经触发。

最佳答案

我也必须想出解决这个问题的办法。 android SDK 中似乎没有处理此事件的方法。我所做的是创建一个每 200 毫秒运行一次的计时器,并检查 map View 的中心点是否已更改。如果有并且设置了 a 标志。当中心点不再变化(oldMapCenter==newMapCenter)时,计时器方法知道平移何时停止。它可能不是最好的解决方案,但它对我有用。在您的 MapActivity 中插入以下代码。

注意:这不会在用户平移时更新 View ,只会在之后。

    GeoPoint newMapCenter,oldMapCenter;
int newZoomLevel=0,oldZoomLevel=0;
Boolean isMoving=false;
@Override
public void onResume() {
super.onResume();

autoUpdate = new Timer();
autoUpdate.schedule(new TimerTask() {
@Override
public void run() {
((Activity) getActivity()).runOnUiThread(new Runnable() {
public void run() {

if(oldMapCenter==null){
oldMapCenter=mapView.getMapCenter();
}else{
newMapCenter=mapView.getMapCenter();
if(!geoPointsAreSame(newMapCenter,oldMapCenter)&& (!isMoving)){
isMoving=true;
}else{
if(geoPointsAreSame(newMapCenter,oldMapCenter)&&(isMoving)){
//Insert update overlay code here
isMoving=false;
}
}
oldMapCenter=newMapCenter;
}
newZoomLevel=mapView.getZoomLevel();

if(oldZoomLevel==0){
oldZoomLevel=mapView.getZoomLevel();
}else{
if(oldZoomLevel!=newZoomLevel){
//insert update overlay code here

}
}
oldZoomLevel=mapView.getZoomLevel();


}
}


private boolean geoPointsAreSame(GeoPoint newMapCenter,
GeoPoint oldMapCenter) {
if(newMapCenter.getLatitudeE6()==oldMapCenter.getLatitudeE6()){
if(newMapCenter.getLongitudeE6()==oldMapCenter.getLongitudeE6()){
return true;
}
}
return false;
}

});
}
}, 3000, 200); // updates each 200 millisecs`-

关于Android:如何在 MapView 上捕获平移的结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5817216/

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