3

私たちは独自の MapView を作成しようとしています。マップビューにオーバーレイを追加すると、他のマッピング API でオーバーレイがどのように描画されるかを理解しようとしています。

ViewGroup を拡張する MapView があります。MapView.invalidate() を呼び出すと、mapview の dispatchDraw メソッドが呼び出されることがわかったと思います。その音は正しいですか?

それが本当なら、マップビューの onDraw と draw メソッドはいつ呼び出されますか?

さらに重要なことは、このすべてのビューと、ドキュメントがどこにでもあるときにどのメソッドが呼び出されるかです。

ありがとう!

編集 この SO 投稿は、ViewGroup を拡張するクラスの場合、onDraw メソッドが自動的に呼び出されないことを説明しました。必要な場合は強制する必要があります。しかし、ebarrenchea が指摘したように、順番は draw、onDraw、dispatchDraw IF すべてのメソッドが呼び出された場合

4

2 に答える 2

1

ビューグループを呼び出すinvalidateと、強制的drawに実行され、次にが呼び出されonDrawますdispatchDraw詳細については、こちらのビューのドキュメントとこちら のビューのソースコードをご覧ください。

于 2013-02-21T22:43:57.650 に答える
0

invalidate()を発生させるには、UI スレッドから呼び出す必要がありonDraw()ます。postInvalidate()と同じ効果を持つはずの whichを使用してみてくださいinvalidate()。ただし、非 UI スレッドから機能します。

于 2013-10-31T12:31:16.457 に答える