查看GLSurfaceView在某些设备上不可见

时间:2015-01-11 17:48:32

标签: android android-layout glsurfaceview

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

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

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

已知有问题的设备是华为y300与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) - 没有帮助。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

对于脏的rects有一些棘手的优化,比如必须完成图层混合的遮罩区域,但是在需要时不会更新这些rects。在显示隐藏视图后调用parentView.requestLayout()会强制验证这些脏对象。

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