2011-09-29 107 views

答えて

33

UI Threadから図面を再描画する場合は、invalidate()メソッドに呼び出すことができます。

Non UI Threadからビューを描画する場合は、postInvalidate()メソッドを呼び出すことができます。

Viewクラスから派生した各クラスには、invalidateメソッドとpostInvalidateメソッドがあります。 invalidateが呼び出されると、現在のビューが変更されたことをシステムに通知し、できるだけ早く再描画する必要があります。このメソッドはあなたのUIThreadからしか呼び出せないので、あなたがUIThreadにいなくても、あなたのViewが変更されたことをシステムに通知したいときは、別のメソッドが必要です。 postInvalidateメソッドはUIThread以外のシステムからシステムに通知し、UIThread上の次のイベントループではできるだけ早く再描画されます。また、まもなくSDKドキュメントで説明されています。

CLICK HERE

UPDATE:

(のようなUI更新右離れを持っていない)、この他のスレッドからpostInvalidateを使用して生じるいくつかの問題があります。

runOnUiThread(new Runnable() { 
    public void run() { 
    myImageView.setImageBitmap(image); 
    imageView.invalidate(); 
    } 
}); 
+3

は、postInvalidate()とまったく同じではありませんか? – rupps

+0

アンドロイドのサンプルコード:http://developer.android.com/training/custom-views/index.htmlには、内部にプロパティゲッタとセッタを持つPieChart.javaがあります。ほとんどのプロパティ設定ツールはinvalidate();を呼び出します。 PieChart.javaはUIスレッドではありません。どうしてそこから無効化を呼び出すことができますか? (主なスレッドである主なアクティビティーjavaファイルがあります)。私はpostinvalidate()の呼び出しを期待していました。彼らはPieChart.javaのonDrawメソッドの下でそれをやったのと同じように。 – Simon

+0

@Simon私はコードを見ていませんが、PieChart.javaは、スレッドを拡張したり別のスレッドを別の方法で使用するよう指定していない限り、UIスレッドでは動作します。起こりそうなことは、円グラフが描画されていることです。円グラフの 'onDraw'内で' postInvalidate() 'が呼び出され、UIスレッドのビューに円グラフを描画します。 –

関連する問題