我有3个视图的布局,它们一个接一个地实现z-order:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<view
android:id="@+id/above"
android:layout_width="1px"
android:layout_height="1px"
class="com.hooliganslab.stormx.VSurfaceView"
/>
<view
android:id="@+id/gl_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.hooliganslab.stormx.GLNativeSurfaceView"
/>
<view
android:id="@+id/below"
android:layout_width="1px"
android:layout_height="1px"
class="com.hooliganslab.stormx.VSurfaceView"
/>
</RelativeLayout>
onCreate的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
overridePendingTransition(0,0);
setContentView(R.layout.sandwich);
_above=(VSurfaceView) findViewById(R.id.above);
_gl_view=(GLNativeSurfaceView) findViewById(R.id.gl_view);
_below=(VSurfaceView) findViewById(R.id.below);
_handler = new Handler();
_pause=false;
}
onResume的代码:
protected void onResume() {
super.onResume();
_gl_view.onResume();
_pause=false;
render();
}
onPause的代码:
protected void onPause() {
_gl_view.onPause();
_pause=true;
super.onPause();
}
当应用程序启动时(onCreate-onResume)标识为“下方”的视图位于标识为gl_view的视图的下方,标识为“上方”的视图位于标识为gl_view的视图的上方。
当暂停(onPause-onResume)视图后应用程序重新出现时,将其显示顺序更改为相反:标识为“上方”的视图位于标识为gl_view的视图下方,标识为“下方”的视图位于标识为gl_view的视图上方。尽管进一步转换,这个订单仍然保持稳定。
此行为不依赖于使用的布局类型(RelativeLayout或FrameLayout),也不依赖于将视图包装到LinearLayouts中。
如果我为gl_view调用setZOrderMediaOverlay(true),它总是位于“上方”和“下方”视图之上。
如何创建正确且永久的观看顺序?
重要!这里使用的词语“上方”和“下方”是z顺序。