Android:如何在MapView上捕捉平移的结束
您能告诉我如何捕捉MapView平移的结尾吗?一开始,我想我可以使用MotionEvent.ACTION\u。但是,当我的触摸快速移动时,平移动画仍在进行中,而动作启动事件之前已启动。我还必须想出解决此问题的方法。android SDK中似乎没有处理此事件的方法。我所做的是创建一个每200ms运行一次的计时器,并检查地图视图的中心点是否已更改。如果有,则设置a标志。当中心点不再改变时,timer方法知道平移何时停止oldMapCenter==newMapCenter。这可能不是最好的解决方案,但对我来说很有效。在MapActivity中插入以下代码 注意:这将不会在用户进行平移时更新视图,仅在平移后更新Android:如何在MapView上捕捉平移的结束,android,Android,您能告诉我如何捕捉MapView平移的结尾吗?一开始,我想我可以使用MotionEvent.ACTION\u。但是,当我的触摸快速移动时,平移动画仍在进行中,而动作启动事件之前已启动。我还必须想出解决此问题的方法。android SDK中似乎没有处理此事件的方法。我所做的是创建一个每200ms运行一次的计时器,并检查地图视图的中心点是否已更改。如果有,则设置a标志。当中心点不再改变时,timer方法知道平移何时停止oldMapCenter==newMapCenter。这可能不是最好的解决方案,但
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 SDK中似乎没有处理此事件的方法。我所做的是创建一个每200ms运行一次的计时器,并检查地图视图的中心点是否已更改。如果有,则设置a标志。当中心点不再改变时,timer方法知道平移何时停止oldMapCenter==newMapCenter。这可能不是最好的解决方案,但对我来说很有效。在MapActivity中插入以下代码 注意:这将不会在用户进行平移时更新视图,仅在平移后更新
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`-
是否要处理缩放事件请确认?不,我没有。我想知道平移什么时候完成。你能详细说明一下吗,因为我不知道确切的问题是什么。你知道怎么做吗,因为我被完全相同的事情困住了。我想知道地图视图最后停在哪里,这样我就可以得到坐标了!是否要处理缩放事件请确认?不,我没有。我想知道平移什么时候完成。你能详细说明一下吗,因为我不知道确切的问题是什么。你知道怎么做吗,因为我被完全相同的事情困住了。我想知道地图视图最后停在哪里,这样我就可以得到坐标了!