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):後ろから実行
なぜ機能しなかったのですか?私はそれのために別の方法を使うべきですか?
このコードは正しいですが、私はロジックの実装を点滅させるのに間違いを犯します。しかし、Drawable.Callbackを使うのは良い考えです – hatesms