久しぶりにカメラアプリを作ろうと、数年前のプロジェクトを見直す。
写真にフレームイラストを合成しようとすると、どうしても、Viewを重ねる必要が出てくる。
下にカメラのプレビュー映像を流し、その上に(プリクラ的な)フレームを重ねるわけだ。
で、この辺も過去にしっかり作っていたんだけど。
ググっていると、気になる一文を見つけた。
ホームキーを押すなどして、一旦アプリを停止してから、レジュームすると、
SurfaceViewの順番が入れ替わるらしいのだ。
過去には、そこまで細かくテストしてなかった気がするので、早速テストしてみると、
確かに、フレームイラストの上に、プレビューが来てしまうではないか。
これを回避するには、SurfaceViewに対して、onResume時に、bringtoFront() をすればいいらしい。
ということで追加。
…。
直らんやんけ!
カメラの初期化に時間を食ってるからか?
色々実験してみるが、全く直る気配なし。
再び、グーグル先生に詳しく聞いてみる。
なんと!
SurfaceViewのソート順は、内部で勝手に決められていて、任意に設定することは出来ないとな!
任意ではないが、ある程度の設定はできる。
setZOrderOnTop(true);
これで、最前面のプライオリティになるようだ。
が、コレだけではダメ。
onResume時に、bringToFront()がやっぱり必要なのだ。
つまり、この2つは必須セット。
おのれ、bringToFront()だけとか、中途半端な情報に騙されたわ!