diff options
author | Tobrun <tobrun@mapbox.com> | 2016-05-17 12:44:37 +0200 |
---|---|---|
committer | Tobrun <tobrun@mapbox.com> | 2016-05-18 12:02:04 +0200 |
commit | 1d84a8964e39bd6a35de1dc64c03496bcdcf2c4f (patch) | |
tree | 556dcee3cf4c1c8f129ed488514b101e4bd39a37 /platform/android | |
parent | 73bf8b6ef67dc76c3e6b4f53d848158c255a5636 (diff) | |
download | qtlocation-mapboxgl-1d84a8964e39bd6a35de1dc64c03496bcdcf2c4f.tar.gz |
[android] #4942 - using Android SDK Compass example
Diffstat (limited to 'platform/android')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java | 51 |
1 files changed, 23 insertions, 28 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 db501dca77..8b5a347d0c 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 @@ -429,18 +429,19 @@ public class MyLocationView extends View { private class CompassListener implements SensorEventListener { - private boolean paused; private SensorManager mSensorManager; private Sensor mAccelerometer; private Sensor mMagnetometer; - private float[] mLastAccelerometer = new float[3]; - private float[] mLastMagnetometer = new float[3]; - private boolean mLastAccelerometerSet = false; - private boolean mLastMagnetometerSet = false; - private float[] mR = new float[9]; - private float[] mOrientation = new float[3]; + private boolean paused; + private float mCurrentDegree = 0f; + private float[] mOrientation = new float[3]; + private float[] mGData = new float[3]; + private float[] mMData = new float[3]; + private float[] mR = new float[16]; + private float[] mI = new float[16]; + // Controls the sensor updateLatLng rate in milliseconds private static final int UPDATE_RATE_MS = 500; @@ -476,30 +477,24 @@ public class MyLocationView extends View { return; } - if (event.sensor == mAccelerometer) { - System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length); - mLastAccelerometerSet = true; - } else if (event.sensor == mMagnetometer) { - System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length); - mLastMagnetometerSet = true; + int type = event.sensor.getType(); + float[] data; + if (type == Sensor.TYPE_ACCELEROMETER) { + data = mGData; + } else if (type == Sensor.TYPE_MAGNETIC_FIELD) { + data = mMData; + } else { + // we should not be here. + return; } - if (mLastAccelerometerSet && mLastMagnetometerSet) { - SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer); - SensorManager.getOrientation(mR, mOrientation); - float azimuthInRadians = mOrientation[0]; - - float compassBearing = (float) (Math.toDegrees(azimuthInRadians) + 360) % 360; - if (compassBearing < 0) { - // only allow positive degrees - compassBearing += 360; - } - - if (compassBearing > mCurrentDegree + 15 || compassBearing < mCurrentDegree - 15) { - mCurrentDegree = compassBearing; - setCompass(mCurrentDegree); - } + for (int i = 0; i < 3; i++) { + data[i] = event.values[i]; } + + SensorManager.getRotationMatrix(mR, mI, mGData, mMData); + SensorManager.getOrientation(mR, mOrientation); + setCompass((int) (mOrientation[0] * 180.0f / Math.PI)); mCompassUpdateNextTimestamp = currentTime + UPDATE_RATE_MS; } |