【问题标题】:View over GLSurfaceView not visible on some devices查看 GLSurfaceView 在某些设备上不可见
【发布时间】:2015-01-14 21:10:00
【问题描述】:

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

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

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

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

感谢您的帮助。

【问题讨论】:

  • 图层不会随意更改 z 顺序。我的猜测是,这与 GLSurfaceView 层无关,而是与其他未能绘制的 UI 元素有关。如果图层配置错误,菜单将永远不会出现,而不是有时会在多次尝试后出现。您可能应该将注意力集中在动画布局上。
  • 我有没有 OpenGL 的模式 - 游戏在通常的视图上渲染到画布上,布局层次完全相同,在这种模式下,在有问题的设备上都可以正常工作。视图也不是动态添加的,只是显示/隐藏,所以 z 顺序没有改变。所以我认为用通常的视图组成 GLSurface 的问题,取决于硬件,我相信。
  • 您可能正面临这个问题,您开发的游戏只考虑了一个版本的 open GL。新设备有 2.0 和最新的 3.0 。所以,这可能是您的 GL 无法正常工作的问题。
  • 不,我使用的是 GL 1.0。如果请求的版本不受支持,它将根本无法工作。

标签: android android-layout glsurfaceview


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2017-06-06
    相关资源
    最近更新 更多