aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/ui/CompassView.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/ui/CompassView.java')
-rw-r--r--main/src/cgeo/geocaching/ui/CompassView.java51
1 files changed, 18 insertions, 33 deletions
diff --git a/main/src/cgeo/geocaching/ui/CompassView.java b/main/src/cgeo/geocaching/ui/CompassView.java
index 8a295c3..d0b4a36 100644
--- a/main/src/cgeo/geocaching/ui/CompassView.java
+++ b/main/src/cgeo/geocaching/ui/CompassView.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.ui;
import cgeo.geocaching.R;
-import cgeo.geocaching.utils.Log;
+import cgeo.geocaching.utils.PeriodicHandler;
import android.content.Context;
import android.graphics.Bitmap;
@@ -9,14 +9,11 @@ import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
-import android.os.Handler;
-import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
public class CompassView extends View {
- private volatile boolean wantStop = false;
private Context context = null;
private Bitmap compassUnderlay = null;
private Bitmap compassRose = null;
@@ -49,17 +46,7 @@ public class CompassView extends View {
private int compassOverlayWidth = 0;
private int compassOverlayHeight = 0;
private boolean initialDisplay;
- private Handler changeHandler = new Handler() {
-
- @Override
- public void handleMessage(Message message) {
- try {
- invalidate();
- } catch (Exception e) {
- Log.e("CompassView.changeHandler: " + e.toString());
- }
- }
- };
+ private final RedrawHandler redrawHandler = new RedrawHandler();
public CompassView(Context contextIn) {
super(contextIn);
@@ -91,14 +78,12 @@ public class CompassView extends View {
remfil = new PaintFlagsDrawFilter(Paint.FILTER_BITMAP_FLAG, 0);
initialDisplay = true;
- wantStop = false;
-
- new changeThread().start();
+ redrawHandler.start();
}
@Override
public void onDetachedFromWindow() {
- wantStop = true;
+ redrawHandler.stop();
if (compassUnderlay != null) {
compassUnderlay.recycle();
@@ -165,25 +150,25 @@ public class CompassView extends View {
return actual + offset;
}
- private class changeThread extends Thread {
+ private class RedrawHandler extends PeriodicHandler {
- @Override
- public void run() {
- while (!wantStop) {
- try {
- sleep(50);
- } catch (Exception e) {
- // nothing
- }
+ public RedrawHandler() {
+ super(40);
+ }
- synchronized (CompassView.this) {
- azimuthShown = smoothUpdate(northMeasured, azimuthShown);
- cacheHeadingShown = smoothUpdate(cacheHeadingMeasured, cacheHeadingShown);
+ @Override
+ public void act() {
+ final double newAzimuthShown = smoothUpdate(northMeasured, azimuthShown);
+ final double newCacheHeadingShown = smoothUpdate(cacheHeadingMeasured, cacheHeadingShown);
+ if (Math.abs(newAzimuthShown - azimuthShown) >= 2 || Math.abs(newCacheHeadingShown - cacheHeadingShown) >= 2) {
+ synchronized(CompassView.this) {
+ azimuthShown = newAzimuthShown;
+ cacheHeadingShown = newCacheHeadingShown;
}
-
- changeHandler.sendMessage(Message.obtain());
+ invalidate();
}
}
+
}
@Override