2011-08-03 39 views
18

私はカスタムビュー(MyViewと呼ぶ)を作成しました。これは基本的にキャンバスを使用してテキストを描画します。描画されるテキストは、グローバル変数を使用して設定されます。ビューを強制的に再描画する

プログラムの実行中のある時点で、グローバル変数を変更し、テキストを更新するためにMyViewを再描画する必要があります。私はfindViewById()を試してからinvalidate()を試しましたが、これは何もしません。 MyViewの中に何も変わっていないので、onDraw()に電話する理由はないと私は思う。ビューがそれを必要としないと思っても強制的に再描画するようにする方法はありますか?

答えて

30

私はテキストを格納MYVIEW内のメンバ変数を持って、そしてそれのために公共のセッターを作成する場合は、単にそのメソッドを呼び出すと、内部の変数を設定する

自体を再描画するMYVIEWを引き起こしViewはビュー上で描画を呼び出さない。実際、ビューシステムは内部変数を知らないし気にもしません。

ビュー上にinvalidate()を呼び出すと、ビューを介して自身が描画されます。これをチェックアウトする:http://developer.android.com/guide/topics/ui/custom-components.html

TextViewは、setText()を呼び出したときに内部的に無効化し、setText()呼び出しで新しいテキストセットを再描画します。同様のことをする必要があります。

+1

申し訳ありませんが、私は本当に 'invalidate()'を呼び出しました。私が 'invalidate()'を呼び出すことは、変わった変数が 'View'の外部であったため(グローバルであったため)、機能しませんでした。そこで内部変数を作成し、無効にする前にそれを変更しました。 –

0

私はそれを理解しました。テキストを格納するMyViewのメンバー変数があり、そのパブリックセッターを作成すると、そのメソッドを呼び出すだけでMyViewが再描画されます。シンプル!

関連する問題