package de.cwde.freeshisen;
+import java.lang.ref.WeakReference;
import java.util.List;
import java.util.Locale;
import java.util.Timer;
private int tileWidth;
private Bitmap bg;
private Bitmap tile[];
- private Point selection1 = new Point(0,0);
- private Point selection2 = new Point(0,0);
- private List<Point> path=null;
- private List<Line> pairs=null;
+ private Point selection1 = new Point(0, 0);
+ private Point selection2 = new Point(0, 0);
+ private List<Point> path = null;
+ private List<Line> pairs = null;
private long startTime;
private long playTime;
private long baseTime;
private Timer timer;
- private static Handler timerHandler;
- private boolean timerRegistered=false;
+ static class hHandler extends Handler {
+ private final WeakReference<ShisenShoView> mTarget;
+
+ hHandler(ShisenShoView target) {
+ mTarget = new WeakReference<ShisenShoView>(target);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ ShisenShoView target = mTarget.get();
+ if (target != null)
+ target.onUpdateTime();
+ }
+ }
+
+ private Handler timerHandler = new hHandler(this);
+
+ private boolean timerRegistered = false;
private ShisenSho app;
private StatePlay cstate;
private StatePaint pstate;
}
private void registerTimer() {
- if (timer!=null) return; // Already registered
- timerHandler = new Handler() {
- public void handleMessage(Message msg) {
- onUpdateTime();
- }
- };
- timer=new Timer();
+ if (timer != null)
+ return; // Already registered
+ timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
timerHandler.sendEmptyMessage(Activity.RESULT_OK);
}
}, 0, 1000);
- timerRegistered=true;
+ timerRegistered = true;
}
private void unregisterTimer() {
- if (timer==null) return; // Already unregistered
+ if (timer == null)
+ return; // Already unregistered
timer.cancel();
timer = null;
- timerHandler = null;
- timerRegistered=false;
+ timerRegistered = false;
}
public void pauseTime() {
int selectcolor = Color.parseColor(COLOR_SELECTED);
int hintcolor = Color.parseColor(COLOR_HINT);
- Paint paint = new Paint();
- paint.setFlags(Paint.ANTI_ALIAS_FLAG);
// Background & board painting
switch (pstate) {
int bgHeight = bg.getHeight();
for (int i=0; i<screenHeight/bgHeight+1; i++) {
for (int j=0; j<screenWidth/bgWidth+1; j++) {
- canvas.drawBitmap(bg, j*bgWidth, i*bgHeight, paint);
+ canvas.drawBitmap(bg, j*bgWidth, i*bgHeight, null);
}
}
// Tiles are 56px height, 40px width each
char piece=app.board.board[i][j];
if (piece!=0) {
- canvas.drawBitmap(tile[piece], x0+j*tileWidth, y0+i*tileHeight, paint);
+ canvas.drawBitmap(tile[piece], x0+j*tileWidth, y0+i*tileHeight, null);
}
}
}
// Matching path
switch (pstate) {
case MATCHED:
- paint.setColor(selectcolor);
- paint.setStyle(Style.STROKE);
- paint.setStrokeCap(Cap.ROUND);
- paint.setStrokeJoin(Join.ROUND);
- paint.setStrokeWidth(3);
-
if (path!=null) {
Point p0=null;
for (Point p1 : path) {
if (p0!=null) {
- drawLine(canvas, x0, y0, p0, p1, paint);
+ drawLine(canvas, x0, y0, p0, p1, selectcolor);
}
p0=p1;
}
Point a = pair.a;
Point b = pair.b;
path = app.board.getPath(a, b);
- paint.setColor(hintcolor);
- paint.setStyle(Style.STROKE);
- paint.setStrokeCap(Cap.ROUND);
- paint.setStrokeJoin(Join.ROUND);
- paint.setStrokeWidth(3);
highlightTile(canvas, x0, y0, a, hintcolor);
Point p0 = null;
for (Point p1 : path) {
if (p0 != null) {
- drawLine(canvas, x0, y0, p0, p1, paint);
+ drawLine(canvas, x0, y0, p0, p1, hintcolor);
}
p0 = p1;
}
}
- private void drawLine(Canvas canvas, int x0, int y0, Point p0, Point p1,
- Paint paint) {
+ private void drawLine(Canvas canvas, int x0, int y0, Point p0, Point p1, int color) {
+ Paint paint = new Paint();
+ paint.setFlags(Paint.ANTI_ALIAS_FLAG);
+ paint.setColor(color);
+ paint.setStyle(Style.STROKE);
+ paint.setStrokeCap(Cap.ROUND);
+ paint.setStrokeJoin(Join.ROUND);
+ paint.setStrokeWidth(3);
canvas.drawLine(
x0 + p0.j * tileWidth - 2 + (tileWidth / 2),
y0 + p0.i * tileHeight - 2 + (tileHeight / 2),