2011-02-08 2 views
1

У меня есть мои классы для рисования. Мне нужно перерисовать его периодично, чтобы получить некоторый «мигающий» эффект. Я использую 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): бежать со спины

Почему это не сработало? Должен ли я использовать для этого другие методы?

+0

этот код верный, но я ошибаюсь в реализации мигающей логики. Но его хорошая идея использовать Drawable.Callback – hatesms

ответ

2

Я считаю, что ответ developer doc.

Используйте текущую реализацию Drawable.Callback иметь этот Drawable перерисовывается. Не делает ничего, если нет Обратный звонок прилагается к Drawable.