我让我的班级实现了 Drawable。我需要定期重绘它以获得一些“眨眼”效果。我正在使用 timer.schedule 来安排 invalidateSelf() 但什么也没发生。
private class DrawableImpl extends Drawable {
private boolean blinkFlag = false;
private Timer timer = new Timer(false);
private int maxFlashCount = 21;
private int intervalBetweenFlashesInMs = 100;
private int currentFlashNumber = 0;
@Override
public void draw(Canvas canvas) {
Log.i(TAG, "draw");
/*draw stable part*/
if (blinkFlag ) {
Log.i(TAG, "blink");
/*draw bliking part*/
}
blinkFlag = !blinkFlag;
final DrawableImpl drawableImpl = this;
if (currentFlashNumber < maxFlashCount) {
Log.i(TAG, "schedule");
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i(TAG, "run from back");
drawableImpl.invalidateSelf();
}
});
}
}, intervalBetweenFlashesInMs);
currentFlashNumber++;
}
}
}
在日志中类似这样的
内容 02-08 23:07:44.791: INFO/(258): draw
02-08 23:07:44.791: INFO/(258): blink
02-08 23:07:44.791: INFO/(258 ): 时间表
02-08 23:07:45.011: INFO/(258): 从后面跑
02-08 23:07:45.021: INFO/(258): 平局
02-08 23:07:45.021: INFO/(258 ): 时间表
02-08 23:07:45.171: INFO/(258): 从后面跑
02-08 23:07:45.171: INFO/(258): 平局
02-08 23:07:45.171: INFO/(258 ): 闪烁
02-08 23:07:45.171: INFO/(258): 计划
02-08 23:07:45.331: INFO/(258): 从后面跑
为什么它不起作用?我应该为此使用其他方法吗?