在某些设备上看不到 GLSurfaceView

View over GLSurfaceView not visible on some devices

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

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

可能由于某些原因,gl 表面渲染在 activity 层之上,但应该在后面。

已知有问题的设备是 Android 4.1.1 的 Huawei y300、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) - 没有帮助。

感谢您的帮助。

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

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

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