TextView が描画更新されなくなったよ。
どうやら、onDraw イベント自体が発生してないみたい。
invalidate() でrepaint しても効かない…。
どないせいっちゅうねん?!
一日中、あーでもない、こーでもないとコネくりました結果──
どうやら原因は、View の重ね合わせにあるみたいだ…。
原因はView の多層構造
作ってるアプリは以下のような構造になってる。
<画面奥(下層)> 「メッセージ表示」 (TextView) 「選択肢表示」 <画面手前(上層)>
「メッセージ表示」がredraw されなくなるのは、「選択肢表示」をINVISIBLE にしてから。
つまり「選択肢表示」がredraw されなくなってからだ。
どうやら、上の層でredraw しないと、下の層もredraw しないらしい。
どうりで、TextView でinvalidate() かけても描画更新されないワケだよ…。orz
これは上の層が INVISIBLE の状態であってもredraw されない。
また、下の層が上の層の描画範囲外の場合も、redraw されない。
理屈はわかるけど、ひどい仕様だよ。まったく…。
まとめ
- 上層でredraw しないと、下層もredraw しない
- 上層が INVISIBLE の状態であっても同様
- 下層が上層の描画範囲外だとredraw されない
by the way…
wrap_parent の多層構造となっている場合。
最上層に透明なfill_parent のView を配置し、ソレにinvalidate をかけるようにしてやるといいかもしれない。
今回、定期的に、最上層を描画更新するようにしたら、全体的に描画の反応がよくなった。
てか、いままで手放しでTextViewが更新されてたのって、そういうことでもあったんだね。(^_^;