summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java36
1 files changed, 17 insertions, 19 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
index a1515b39c9..16ff084a48 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
@@ -1,6 +1,5 @@
package com.mapbox.mapboxsdk.maps.widgets;
-import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Camera;
@@ -28,7 +27,6 @@ import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
-import com.mapbox.mapboxsdk.R;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.constants.MyBearingTracking;
@@ -67,6 +65,14 @@ public class MyLocationView extends View {
private ValueAnimator accuracyAnimator;
private ValueAnimator directionAnimator;
+ private ValueAnimator.AnimatorUpdateListener invalidateSelfOnUpdateListener =
+ new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ invalidate();
+ }
+ };
+
private Drawable foregroundDrawable;
private Drawable foregroundBearingDrawable;
private Drawable backgroundDrawable;
@@ -260,8 +266,8 @@ public class MyLocationView extends View {
camera.getMatrix(matrix);
//
- if (myBearingTrackingMode != MyBearingTracking.NONE) {
- matrix.postRotate((Float) directionAnimator.getAnimatedValue());
+ if (myBearingTrackingMode != MyBearingTracking.NONE && directionAnimator != null) {
+ matrix.preRotate((Float) directionAnimator.getAnimatedValue());
}
// put matrix at location of MyLocationView
@@ -295,10 +301,6 @@ public class MyLocationView extends View {
this.tilt = (float) tilt;
}
- void updateOnNextFrame() {
- mapboxMap.invalidate();
- }
-
public void onPause() {
compassListener.onPause();
toggleGps(false);
@@ -444,6 +446,7 @@ public class MyLocationView extends View {
directionAnimator = ValueAnimator.ofFloat(oldDir, newDir);
directionAnimator.setDuration(375);
+ directionAnimator.addUpdateListener(invalidateSelfOnUpdateListener);
directionAnimator.start();
}
@@ -526,24 +529,19 @@ public class MyLocationView extends View {
return;
}
- long currentTime = SystemClock.elapsedRealtime();
- if (currentTime < mCompassUpdateNextTimestamp) {
- return;
- }
-
int type = event.sensor.getType();
- float[] data;
if (type == Sensor.TYPE_ACCELEROMETER) {
- data = mGData;
+ System.arraycopy(event.values, 0, mGData, 0, 3);
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
- data = mMData;
+ System.arraycopy(event.values, 0, mMData, 0, 3);
} else {
// we should not be here.
return;
}
- for (int i = 0; i < 3; i++) {
- data[i] = event.values[i];
+ long currentTime = SystemClock.elapsedRealtime();
+ if (currentTime < mCompassUpdateNextTimestamp) {
+ return;
}
SensorManager.getRotationMatrix(mR, mI, mGData, mMData);
@@ -587,7 +585,7 @@ public class MyLocationView extends View {
double latitude = fromLat + (toLat - fromLat) * frac;
double longitude = fromLng + (toLng - fromLng) * frac;
behavior.updateLatLng(latitude, longitude);
- updateOnNextFrame();
+ update();
}
}