У меня есть мои классы для рисования. Мне нужно перерисовать его периодично, чтобы получить некоторый «мигающий» эффект. Я использую timer.schedule для расписания invalidateSelf(), но ничего не случилось.Redraw Drawable by timer using 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++;
}
}
}
В Log-то вроде этого
02-08 23: 07: 44,791: INFO/(258): рисовать
02-08 23: 07: 44,791: INFO/(258): мигания
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): draw
02-08 23: 07: 45.171: INFO/(258): blink
02-08 23: 07: 45.171: INFO/(258)): расписание
02-08 23: 07: 45.331: INFO/(258): бежать со спины
Почему это не сработало? Должен ли я использовать для этого другие методы?
этот код верный, но я ошибаюсь в реализации мигающей логики. Но его хорошая идея использовать Drawable.Callback – hatesms