在onPause-onResume之后,Android活动视图会将其显示z顺序更改为相反

时间:2013-12-11 15:48:50

标签: android android-layout android-lifecycle

我有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顺序。

0 个答案:

没有答案