diff options
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.java | 36 |
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(); } } |