October 30, 2022

Android Surface View上のVisibility

意外と忘れがちなので小ネタ。

AndroidでSurfaceViewの上にViewを配置してVisibilityを切り替える場合、Viewの再配置はそれなりの処理が入ってしまうので、少しでも処理を減らそうと思いデフォルトのVisibilityをView.INVISIBLEで定義しておき、

view.visibility = VISIBLE

で切り替えようとします。

しかし、これだとSurfaceViewの上に乗ったViewは表示されない場合があります。
Android2.3以降の変更によるもので、SurfaceViewが表示される前にINVISIBLEになってる場合は表示されません。逆にいうとすでに表示されているViewに対して追加した場合はINVISIBLEでもVISIBLEの切り替えが可能になります。
同じタイミングでViewを初期化する場合はINVISIBLEではなくGONEを使って切り替えましょう。

この間なんで表示されないんやってハマったので小ネタでした。

© AAkira 2023