我有我的類實現Drawable。我需要重新繪製它以獲得一些「閃爍」效果。我正在使用timer.schedule來安排invalidateSelf(),但沒有任何事情發生。重新繪製通過timer使用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:信息/(258):畫
02-08 23:07:44.791:信息/(258):眨眼
02-08 23:07:44.791:INFO /(258):schedule
02-08 23:07:45.011:INFO /(258):從後面運行
02-08 23:07:45.021:INFO /( 258):draw
02-08 23:07:45.021:INFO /(258):schedule
02-08 23:07:45.171:INFO /(258):從後面運行
02-08 23:07:45.171:INFO /(258):draw
02-08 23:07:45.171:INFO /(258):blink
02-08 23:07:45.171:INFO /(258 ):日程表
02-08 23:07:45.331:信息/(258):從後面運行
爲什麼它沒有工作?我應該使用其他方法嗎?
該代碼是正確的,但我在閃存邏輯實現中犯了一個錯誤。但是使用Drawable.Callback是個好主意 – hatesms