SurfaceViewの重ね順

久しぶりにカメラアプリを作ろうと、数年前のプロジェクトを見直す。

写真にフレームイラストを合成しようとすると、どうしても、Viewを重ねる必要が出てくる。
下にカメラのプレビュー映像を流し、その上に(プリクラ的な)フレームを重ねるわけだ。

で、この辺も過去にしっかり作っていたんだけど。
ググっていると、気になる一文を見つけた。

ホームキーを押すなどして、一旦アプリを停止してから、レジュームすると、
SurfaceViewの順番が入れ替わるらしいのだ。

過去には、そこまで細かくテストしてなかった気がするので、早速テストしてみると、
確かに、フレームイラストの上に、プレビューが来てしまうではないか。

これを回避するには、SurfaceViewに対して、onResume時に、bringtoFront() をすればいいらしい。
ということで追加。

…。
直らんやんけ!

カメラの初期化に時間を食ってるからか?
色々実験してみるが、全く直る気配なし。

再び、グーグル先生に詳しく聞いてみる。

なんと!
SurfaceViewのソート順は、内部で勝手に決められていて、任意に設定することは出来ないとな!

任意ではないが、ある程度の設定はできる。

setZOrderOnTop(true);

これで、最前面のプライオリティになるようだ。
が、コレだけではダメ。
onResume時に、bringToFront()がやっぱり必要なのだ。

つまり、この2つは必須セット。
おのれ、bringToFront()だけとか、中途半端な情報に騙されたわ!
[PR]
by miries | 2015-01-20 01:59 | Android


<< イージングの実装 タブレットのエアタップ >>