summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-06-16 10:58:17 +0200
committerTobrun <tobrun.van.nuland@gmail.com>2016-06-16 16:02:10 +0200
commitdd221596ba6dfa3b8866b69a11d01e918df5af29 (patch)
tree7551b93deb8f781f0d29d66c428fe8b23b005586 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java
parent8e9fde66083b366e8e7bb5adf8e946b52004f83a (diff)
downloadqtlocation-mapboxgl-dd221596ba6dfa3b8866b69a11d01e918df5af29.tar.gz
[android] #5342 - initial marker animation
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java85
1 files changed, 82 insertions, 3 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java
index 49d7a061d0..580c3796da 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerView.java
@@ -1,12 +1,16 @@
package com.mapbox.mapboxsdk.annotations;
+import android.animation.AnimatorSet;
import android.graphics.Bitmap;
+import android.graphics.PointF;
import android.support.annotation.FloatRange;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
+import android.view.animation.AnimationUtils;
import com.mapbox.mapboxsdk.constants.MapboxConstants;
+import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapboxMap;
/**
@@ -26,8 +30,8 @@ public class MarkerView extends Marker {
private float anchorU;
private float anchorV;
- private float offsetX;
- private float offsetY;
+ private float offsetX = -1;
+ private float offsetY = -1;
private float infoWindowAnchorU;
private float infoWindowAnchorV;
@@ -43,6 +47,15 @@ public class MarkerView extends Marker {
private boolean selected;
+ private LatLng targetPosition;
+ private boolean shouldAnimate;
+ private boolean isAnimationRunning;
+ private AnimatorSet set;
+
+ private long startTime;
+ private long duration;
+ private long remainingTime;
+
/**
* Publicly hidden default constructor
*/
@@ -279,7 +292,7 @@ public class MarkerView extends Marker {
*
* @param alpha the alpha value to animate to
*/
- public void setAlpha(@FloatRange(from=0.0, to=255.0)float alpha) {
+ public void setAlpha(@FloatRange(from = 0.0, to = 255.0) float alpha) {
this.alpha = alpha;
if (markerViewManager != null) {
markerViewManager.animateAlpha(this, alpha);
@@ -339,6 +352,72 @@ public class MarkerView extends Marker {
markerViewManager = mapboxMap.getMarkerViewManager();
}
+ @Override
+ public void setPosition(LatLng position) {
+ setPosition(position, 0);
+ }
+
+ public void setPosition(LatLng position, long duration) {
+ if (duration <= 0) {
+ // update position instantly
+ super.setPosition(position);
+ if (markerViewManager != null) {
+ markerViewManager.update();
+ }
+ } else {
+ // animate using Android SDK animations
+ this.targetPosition = position;
+ if (markerViewManager != null) {
+ markerViewManager.animatePosition(this, duration);
+ }
+ }
+ }
+
+ boolean shouldAnimate() {
+ return shouldAnimate;
+ }
+
+ void setShouldAnimate(boolean animating) {
+ shouldAnimate = animating;
+ }
+
+ boolean isAnimating() {
+ return isAnimationRunning;
+ }
+
+ void setAnimating(boolean animationRunning) {
+ isAnimationRunning = animationRunning;
+ }
+
+ LatLng getTargetPosition() {
+ return targetPosition;
+ }
+
+ void setAnimation(AnimatorSet set) {
+ this.set = set;
+ }
+
+ AnimatorSet getAnimation() {
+ return set;
+ }
+
+ long getRemainingTime() {
+ long time = duration - (AnimationUtils.currentAnimationTimeMillis() - startTime);
+ return time > 0 ? time : 0;
+ }
+
+ void setDuration(long duration) {
+ this.duration = duration;
+ }
+
+ void setStartTime(long startTime) {
+ this.startTime = startTime;
+ }
+
+ PointF getScreenLocation(@NonNull View convertView) {
+ return new PointF(convertView.getX() + offsetX, convertView.getY() + offsetY);
+ }
+
/**
* Get the String representation of a MarkerView.
*