- Androidプログラミング質問スレ revision43
487 :デフォルトの名無しさん[sage]:2014/06/24(火) 13:04:58.98 ID:kdRyqEc0 - FrameLayout、SurfaceViewについての質問をお願いします
FrameLayout SurfaceView(s0) SurfaceView(s1) RelativeLayout(ボタン群) の順序でxmlに記述しています 初回は↓で表示されますが、 RelativeLayout > SurfaceView(s0)> SurfaceView(s1) 外部ギャラリー等を呼び出して戻ってくると表示が↓に変わります RelativeLayout > SurfaceView(s1)> SurfaceView(s0) その後は何回外部ギャラリー等を呼び出しても↓のままです RelativeLayout > SurfaceView(s1)> SurfaceView(s0) setZOrderOnTop(true)を使うとs0とs1の順序は調整出来ますが SurfaceView(s0)> RelativeLayout > SurfaceView(s1) になってしまいs0の後ろにRelativeLayoutが来てしまいます みなさんはどうやって対策していますか?
|
- Androidプログラミング質問スレ revision43
488 :デフォルトの名無しさん[sage]:2014/06/24(火) 13:05:44.57 ID:kdRyqEc0 - >>487
※ネットで見つけたものですがこれが原因なのでしょうか? GLSurfaceViewや、SurfaceViewを複数使った場合に順番がおかしくなる。 † Androidでは、SurfaceViewの継承クラスが複数あるような場合、 SurfaceFlingerというOSの上に直結した特殊な画面合成レイヤーが存在し、 それらが複数のSurfaceの描画順を、内部のZ値(深度)を元に処理を行うが、 Z値がシーン切り替えなどの画面に変化があったときに、再度、それぞれのSurfaceに動的に値が設定されるが、 その値は同一のActivity内のSurfaceの場合、適当になるという恐ろしいバグのような仕様がある。 そこで、onCreateを代表する、onSuspendやonResumeなどすべての画面変化があるタイミングで、 一番上になるSurfaceに対して、SurfaceView.setZOrderOnTop(true); という形でZを強制的にTOPする機能を使い表示順を調整する必要がある。
|
- Androidプログラミング質問スレ revision43
489 :デフォルトの名無しさん[sage]:2014/06/24(火) 14:43:31.92 ID:kdRyqEc0 - >>487
機種依存か、外部ギャラリーの影響か、 が不明ですが現象が出ない端末もありました
|
- Androidプログラミング質問スレ revision43
497 :デフォルトの名無しさん[sage]:2014/06/24(火) 18:05:22.83 ID:kdRyqEc0 - >>487
対策はなんとか出来ました トリッキーな方法なので記載は省きます こんな仕様では困りますね
|