您能否告诉我如何捕捉MapView的平移结束?一开始,我以为我可以使用MotionEvent.ACTION_UP。但是,当我的触摸快速移动时,平移动画仍在进行中,而之前已经触发了ACTION_UP事件。
答案 0 :(得分:0)
我不得不想出解决这个问题的方法。似乎android SDK中没有一个方法来处理这个事件。我所做的是创建一个每200ms运行一次的计时器,并检查mapview的中心点是否已经改变。如果有,则设置一个标志。当中心点不再变化时,计时器方法知道平移何时停止(oldMapCenter == newMapCenter)。它可能不是最好的解决方案,但它对我有用。在MapActivity中插入以下代码。
注意:这不会在用户平移时更新视图,仅在AFTER。
之后 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`-