Android MapView, finding center of map, determining end of animation from fling gesture
The closest thing I could find related to this was the following:
android maps: how to determine map center after a drag has been completed
I want to determine the final "resting place" of the center of the map after the user has "flung" it. I am intercepting the touch event, when the user is lifting their finger up, but this doesn't work when the map is flung with a swipe motion, as the map continues to move at that point. Is there a c开发者_开发百科allback that can be implemented when the map animation is complete? I looked at the documentation for the MapView, Overlay, MapController etc classes and I haven't seen anything that seems to help.
I also have been looking for a "did end drag" solution that detects the map center at the moment exactly after the map ended moving. I haven't found it, so I've made this simple implementation that did work fine:
private class MyMapView extends MapView {
private GeoPoint lastMapCenter;
private boolean isTouchEnded;
private boolean isFirstComputeScroll;
public MyMapView(Context context, String apiKey) {
super(context, apiKey);
this.lastMapCenter = new GeoPoint(0, 0);
this.isTouchEnded = false;
this.isFirstComputeScroll = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
this.isTouchEnded = false;
else if (event.getAction() == MotionEvent.ACTION_UP)
this.isTouchEnded = true;
else if (event.getAction() == MotionEvent.ACTION_MOVE)
this.isFirstComputeScroll = true;
return super.onTouchEvent(event);
}
@Override
public void computeScroll() {
super.computeScroll();
if (this.isTouchEnded &&
this.lastMapCenter.equals(this.getMapCenter()) &&
this.isFirstComputeScroll) {
// here you use this.getMapCenter() (e.g. call onEndDrag method)
this.isFirstComputeScroll = false;
}
else
this.lastMapCenter = this.getMapCenter();
}
}
That's it, I hope it helps! o/
精彩评论