1

我不明白用户锁定屏幕(使用顶部屏幕锁定按钮)并立即返回应用程序与用户按下主页按钮然后立即返回应用程序之间的区别。

似乎正在发出所有相同的呼叫。根据我的观察:

按下主页按钮或屏幕锁定时调用:onPause -> onStop

在重新按下主页按钮或屏幕锁定后按下应用程序时调用:onRestart -> onStart -> onResume

我的个人问题:

这尤其让我感到沮丧,因为我在 onResume 上将 SurfaceView 和 GLSurfaceView 重新创建为 FrameLayout,但是,根据按下的按钮,元素的顺序正在发生变化。我的 onResume 中有以下代码:

cameraPreviewArea = (FrameLayout) findViewById(id.camera_preview);
cameraPreviewArea.addView(glView, glLayout);
cameraPreviewArea.addView(camprevSurfaceView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

这具有在以下情况下将我的 glSurfaceView 显示在顶部的效果:应用程序第一次启动时,以及当应用程序从屏幕锁定然后屏幕解锁恢复时。但是,在按下主页按钮,然后重新打开应用程序时,SurfaceView 被放置在 glSurfaceView 的顶部!

如果我按如下方式切换 addView 调用,则会发生相反的情况。我可以用一些布尔标志来解决这个问题,但由于我不确定屏幕锁定/解锁和主页按钮之间的区别,我不清楚我将在哪里设置布尔值。另外,无论如何我都不想以这种方式解决问题,因为它看起来很老套,并且对问题缺乏任何真正的理解。

先感谢您!

4

2 回答 2

1

一般而言,您没有理由需要不断地从Activity.

由于您感兴趣的两个视图都是SurfaceView组件,因此如果在窗口变为可见或隐藏时需要执行某些操作,则可以利用和方法SurfaceHolder.Callback进行监视。onSurfaceCreated()onSurfaceDestroyed()

于 2012-07-12T20:51:24.287 回答
0

这种特定情况 - 使用两个表面视图并在一个窗口中指定它们的 Z 顺序 - 目前 Android 似乎不支持。android 开发者组的这个帖子分享了以下信息:

框架当前不支持任何类型的多个活动重叠表面视图。您可能会让它们工作,但这主要是由于运气 -视图层次结构没有定义这些表面的 Z 顺序,也没有尝试确保它们以任何特定方式进行 Z 顺序,所以这可能会改变原因。

嗯……给你!

...但是对于尝试此操作的任何人,我找到了一种解决方法:将您的相机预览尺寸设置为 1x1 的小正方形。这将允许您同时显示两者(因为必须显示相机预览才能继续预览)并忽略 cameraPreview 呈现给您的讨厌的 SurfaceView 问题。我相信有一个更好的解决方案,严格使用一个 GLSurfaceView,但它在 3.0 以下不兼容。

于 2012-08-26T21:37:29.470 回答