1. ホーム
  2. android

[解決済み] 実行時にAndroidのビューのサイズを決定する

2022-06-03 02:05:13

質問

アクティビティが作成された後、Androidアプリのビューにアニメーションを適用しようとしています。 これを行うには、ビューの現在のサイズを決定し、現在のサイズから新しいサイズにスケールするアニメーションをセットアップする必要があります。 この部分は、ユーザーからの入力に応じてビューが異なるサイズに拡大されるため、実行時に行う必要があります。 私のレイアウトはXMLで定義されています。

これは簡単な作業のように思われ、これに関する多くのSO質問がありますが、明らかに私の問題を解決したものはありません。 したがって、おそらく私は明白な何かを見逃しています。 私は以下の方法で私のビューにハンドルを取得します。

ImageView myView = (ImageView) getWindow().findViewById(R.id.MyViewID);

これは問題なく動作しますが getWidth() , getHeight() , getMeasuredWidth() , getLayoutParams().width など、すべて0を返します。 また、手動で measure() を呼び出した後、ビュー上で getMeasuredWidth() を呼び出しても、何の効果もありません。

これらのメソッドを呼び出し、デバッガでオブジェクトを検査することを試しましたが、私のアクティビティの onCreate()onPostCreate() . このビューの正確な寸法を実行時に把握するにはどうしたらよいでしょうか。

どのように解決するのですか?

mbaird さんのアドバイスに基づき、私はこの問題を解決する方法を見つけました。 ImageView クラスをサブクラス化し、オーバーライド onLayout() . そして、アクティビティが実装するオブザーバインターフェースを作成し、自分自身への参照をクラスに渡すことで、実際にサイズ調整が終了したときにアクティビティに伝えることができるようにしました。

私はこれが最善の解決策であると100%確信しているわけではありませんが(それゆえ、まだこの答えを正しいものとしてマークしていません)、これは動作しますし、ドキュメントによると、ビューの実際のサイズを見つけることができる最初の方法です。