カスタムビューを作成し、それをxmlファイルのレイアウトに追加しました。 Clickイベントでカスタムビューを更新しようとしていますが、別のクラスからonDrawメソッドを呼び出す方法がわかりません。 invalidateとpostInvalidateはカスタムビューを更新していません。別のクラスからonDrawを呼び出すにはどうすればよいですか?
2
A
答えて
4
ビュー内でメソッドを作成して、変更を受け取り、ビューの内部から無効を呼び出す必要があります。
public void setTextSize (int size) {
mTextSize = size;
invalidate();
}
私にとっては完璧に機能します。
0
View.invalidate()を呼び出す必要があります。ビューが表示され、測定された寸法を持つことを確認します。つまり、ビューgetMeasuerdWidth()およびgetMeasuerdHeight()が> 0を返すようにします。
ondrawメソッドの先頭にログメッセージを挿入して、動作することを確認します。間違いなくinvalidate()する必要があります。データが変更されていない可能性がありますか?
0
onDraw()メソッドの呼び出し結果を無効にします。
別のクラスからcustomViewClassName.invalidate()を呼び出すと、onDraw()メソッドが呼び出されます。
0
私はこのような仕組みを実現するためにメッセージハンドラを使用します。カスタムViewクラスでHandlerを作成し、このハンドラの参照をボタンに渡してから(たとえば、アクティビティのonCreateイベント)、sendMessage()/ handleMessage()メカニズムを使用してButtonと他のビュー。
この方法では、必要に応じて他のすべてのコンポーネントをカスタムビューとうまく組み合わせることもできます。
カスタム表示からアクティビティクラスにどのようなメッセージを送信する必要がありますか?一見、無効化呼び出しやキャンバスを送信できないようです。 – user1134179