2011-02-08 19 views
1

私のクラスにはDrawableが実装されています。私は定期的にいくつかの "点滅"効果を得るためにそれを再描画する必要があります。私はtimer.scheduleを使用してinvalidateSelf()をスケジュールしていますが、何も起こりません。 07:44.791:INFO /(258):描画
2月8日23:07:この
02から08 23のようなログイン何かで 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++; 
     } 
    } 
} 

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):バックから実行
INFO /(258):点滅
02-08 23:07:45.171:INFO /(258):INFO /(258):0158: ):スケジュール
02-08 23:07:45.331:情報/(258):後ろから実行

なぜ機能しなかったのですか?私はそれのために別の方法を使うべきですか?

+0

このコードは正しいですが、私はロジックの実装を点滅させるのに間違いを犯します。しかし、Drawable.Callbackを使うのは良い考えです – hatesms

答えて

2

私はdeveloper docが答えを保持していると信じています。

このDrawableの 再描画を持っているために、現在のDrawable.Callback の実装を使用してください。 Drawableにコールバックが添付されていない場合は何も行いません。

関連する問題