こんにちは、ゲルググです。
ImageViewを500msec間隔で画像を切り替える処理を実装中です。
ところが画像が切り替わらないため、困っています。
処理内容は、
1.Activity生成時にImageViewにOFF画像をセットする ←表示されます。
2.別スレッドにて、500msec後にImageViewにON画像をセットする処理をUIスレッドへポストする ←表示されます。
3.続いて、さらに500msec後にImageViewにOFF画像をセットする処理をUIスレッドへポストする ← ×表示されない(画面はON画像のまま)
やったこと
試しにImageViewを継承してonDraw()メソッドをオーバーライドしたところ、
3の時も呼ばれていることは確認しました。
なので、UIスレッドに処理がわたっているはずだと思うのですが、3が更新されません。
当然、invalidate()つけてもダメでした。
ここで質問なのですが、
・なぜImageViewが更新されないのでしょうか?
・「onDraw()==実際に描画される」ではないのでしょうか?
よろしくお願いします。
ソースコードを抜粋しました。
=================================================
// Activity生成
void onCreate() {
// 最初はoff画像を描画しておく
imageView.setImageResource(R.drawable.off);
new Thread(new Runnable() {
@Override
public void run() {
…
// 500msec後にon画像を描画
CountDownLatch signal1 = new CountDownLatch(1);
handler.postDelayed(new DrawImageView(imageView, signal1, true), 500);
signal1.await();
// 500msec後にoff画像を描画
CountDownLatch signal2 = new CountDownLatch(1);
handler.postDelayed(new DrawImageView(imageView, signal2, false), 500);
signal2.await();
…
}
}).start();
}
// ImageView描画処理
class DrawImageView implements Runnable {
private ImageView view;
private CountDownLatch signal;
private boolean flag;
public DrawImageView(ImageView v, CountDownLatch s, boolean f) {
view = v;
signal = s;
flag = f;
}
@Override
public void run() {
if (flag) {
view.setImageResource(R.drawable.on);
} else {
view.setImageResource(R.drawable.off);
}
signal.countDown();
}
}
=================================================