android - 在某些设备上看不到 GLSurfaceView

标签 android android-layout glsurfaceview

我有 GLSurfaceView 和顶部带有按钮的小型 LinearLayout,代表菜单。此布局默认隐藏,并在用户点击某个按钮时从屏幕底部(通过 TranslateAnimation)显示。 (也尝试在没有动画的情况下显示 - 没有成功)。

在我能得到的所有设备和模拟器上一切正常。 但我收到了用户的反馈,该菜单根本没有出现,或者有时它会在点击 5-10 次后出现。

可能由于某些原因,gl 表面呈现在 Activity 层之上,但应该在后面。

已知有问题的设备是 Huawei y300 with Android 4.1.1, LG Optimus L5, Galaxy Tab 7.7 SCH-I815,也有很多来自不同设备和 Android 版本的报告,但无法重现。

设置:

view.getHolder().setFormat(PixelFormat.RGBX_8888);
view.setEGLConfigChooser(8, 8, 8, 8, 0, 0); // alpha set to 8, else crash on Genymotion emulator
// tried to comment 2 lines above - no success
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

我尝试了 setZOrderMediaOverlay(true) 和 setZOrderOnTop(false) - 没有帮助。

感谢您的帮助。

最佳答案

我找到了解决方案(我得到了有问题的设备并对其进行了测试)。

脏矩形有一些棘手的优化,比如必须进行图层混合的 mask 区域,但这些矩形在需要时不会更新。在显示隐藏 View 后调用 parentView.requestLayout() 强制验证这些脏矩形。

点击 5-10 次后出现菜单的解释是偶尔的广告横幅更新(或其他一些事件),这可能会调用 requestLayout。

关于android - 在某些设备上看不到 GLSurfaceView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27890159/

相关文章:

android - 无法在 Google Glass 上拍摄图像

android - 抽屉图标(汉堡)将工具栏图标移离中心

android - 如何旋转GLSurfaceView?

android - 如何将 GLSurfaceView 渲染保存到文件?

java - 无法使用 SessionLoginBehaviour SSO_WITH_FALLBACK

android - Android 2.3.6 上的操作栏

javascript - React Native,成功设置状态但想同时保存在asyncStorage中

android - 应用程序在 setContentView android 上崩溃,没有堆栈跟踪

android - 在 android.support.v7.widget.GridLayout 中使用 <include> 显示不正确