その4 onWindowFocusChanged

自分へのメモも兼ねて、記事に残しておこうと思います。


アプリを作成する上で、Viewのサブクラスのコンストラクタなどで、getWidth()getHeight()をしても、
正しくViewのサイズが取ってこれず、Viewに描画した画像の初期位置が正しくないことがありました。
この原因として、Viewが表示されていない為、Viewのサイズを取ろうとしても、
正しい大きさが設定されておらず、マイナスの値が入っていたり、
デフォルトの値が入っていたりしています。

・・・さて、どうしたものかと悩んだ時に、解決への糸口となったのが、
onWindowFocusChangedメソッドです。

このメソッドは、、Activityのメソッドで、
Activityから、フォーカスが移った直後か失った直後に発生します。
今回の場合だと、Activity表示後に、Viewが表示されることで、
Viewにフォーカス移り、その時点で呼び出されます。

実際に使用するときは、Activityクラスに以下のメソッド追加します。

   @Override
   public void onWindowFocusChanged(boolean hasFocus) {
       // フォーカス変更後の処理
   }

Activityで、呼び出される為、Viewのインスタンスをメンバで持っておくことになるでしょう。
この後、描画画像の初期化を設定することで解決しました。