Map.getMapPosition at animation end option

This commit is contained in:
Emux 2016-12-02 19:25:36 +02:00
parent 85858911fa
commit 71d7b71035
3 changed files with 27 additions and 5 deletions

View File

@ -26,7 +26,7 @@ import org.oscim.core.MercatorProjection;
*/ */
public class MapPositionActivity extends SimpleMapActivity { public class MapPositionActivity extends SimpleMapActivity {
// Avoid object creation // Reuse MapPosition instance
private final MapPosition mapPosition = new MapPosition(); private final MapPosition mapPosition = new MapPosition();
@Override @Override
@ -59,7 +59,7 @@ public class MapPositionActivity extends SimpleMapActivity {
mMap.postDelayed(new Runnable() { mMap.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
mapPosition.copy(mMap.animator().getDeltaPosition()); mMap.getMapPosition(true, mapPosition);
mapPosition.setPosition(latitude, longitude); mapPosition.setPosition(latitude, longitude);
mMap.animator().animateTo(1000, mapPosition); mMap.animator().animateTo(1000, mapPosition);
} }

View File

@ -337,7 +337,11 @@ public class Animator {
return mState != ANIM_NONE; return mState != ANIM_NONE;
} }
public MapPosition getDeltaPosition() { /**
* Get the map position at animation end.<br>
* Note: valid only with animateTo methods.
*/
public MapPosition getEndPosition() {
return mDeltaPos; return mDeltaPos;
} }
} }

View File

@ -314,11 +314,20 @@ public abstract class Map implements TaskQueue {
} }
/** /**
* Get current {@link MapPosition}. * Get current {@link MapPosition} or at possible animation end.
* *
* @param animationEnd map position at animation end (valid with Animator.animateTo methods)
* @param mapPosition reuse MapPosition instance
* @return true when MapPosition was updated (has changed) * @return true when MapPosition was updated (has changed)
*/ */
public boolean getMapPosition(MapPosition mapPosition) { public boolean getMapPosition(boolean animationEnd, MapPosition mapPosition) {
if (animationEnd) {
if (animator().isActive()) {
mapPosition.copy(animator().getEndPosition());
return true;
}
}
if (!ThreadUtils.isMainThread()) { if (!ThreadUtils.isMainThread()) {
return mViewport.getSyncMapPosition(mapPosition); return mViewport.getSyncMapPosition(mapPosition);
} }
@ -326,6 +335,15 @@ public abstract class Map implements TaskQueue {
return mViewport.getMapPosition(mapPosition); return mViewport.getMapPosition(mapPosition);
} }
/**
* Get current {@link MapPosition}.
*
* @return true when MapPosition was updated (has changed)
*/
public boolean getMapPosition(MapPosition mapPosition) {
return getMapPosition(false, mapPosition);
}
/** /**
* Get current {@link MapPosition}. Consider using * Get current {@link MapPosition}. Consider using
* getViewport.getMapPosition(pos) instead to reuse * getViewport.getMapPosition(pos) instead to reuse