所以我的应用程序中有一个GLSurfaceView由GLSurfaceView.Renderer呈现并使用JPCt作为库.

表面处于不可见的RelativeLayout(可见性:已消失).当我将可见性更改为“可见”然后再返回“已消失”时,布局会按预期显示和隐藏,但GLSurfaceView不显示,它只显示并且不会隐藏,即使我可以单击现在的项目它背后.

这似乎是一些图形缓冲问题,但我没有找到办法让这个工作…任何想法?
谢谢!

解决方法

SurfaceView(和扩展的GLSurfaceView)是 Android中有趣的野兽.来自Android javadoc的引文:

The surface is Z ordered so that it is behind the window holding its
SurfaceView; the SurfaceView punches a hole in its window to allow its
surface to be displayed. The view hierarchy will take care of
correctly compositing with the Surface any siblings of the SurfaceView
that would normally appear on top of it

Android有一个内置的窗口合成器(窗口在这里有一点不同的含义).您的状态栏是一个窗口,您的活动有一个窗口.但是如果你的活动包含一个表面视图,那么就会创建另一个窗口,只是为了保持表面,而android compositor会在窗口中绘制你的视图.所以SurfaceView实际上只是一个透明区域.当你隐藏它时,区域不会被绘制,不会对触摸做出反应,但是表面窗口仍然存在,android不够聪明,无法隐藏窗口.

我会推荐两种解决方案

>让你的表面半透明.然后,当您需要隐藏视图时,可以渲染空表面(Android,Transparent sub-GLSurfaceView in layout?)>完全从视图层次结构中删除视图>另一种有点hacky方式是子类化GLSurfaceView并在可见性更改为GONE时调用onDetachedFromWindow().我没有测试过它,它可能无法正常工作.

android – GL表面和可见性:已经消失了的更多相关文章

  1. 在Android上使用像素缓冲对象(PBO)

    谁能给我一些方向?提前致谢.解决方法我记得glBufferData()没有将你的内部缓冲区映射到GPU内存,它只是将内存中的数据复制到缓冲区中(初始化).要访问由glBufferData()分配的内存,您应该使用glMapBufferRange().该函数返回一个可以读取的JavaBuffer对象.

  2. Android上的GL10和GLES10之间的区别

    那么,如果我忽略onDrawFrame的gl参数,而是在任何地方使用GLES10的静态方法呢?

  3. android – GL表面和可见性:已经消失了

    任何想法?谢谢!

  4. android – Button和GLSurfaceView

    我有一个GLSurfaceView,我在其中使用OpenGL显示一些动画.我现在想在此视图中添加一个按钮.这是如何完成的?可以在不涉及xml布局的情况下完成吗?

  5. android – OpenGl直接渲染到位图(没有任何视图)

    我需要将一些像素着色器应用于位图并将结果发送到服务器.渲染应该在后台进行,所以我不能为此创建GLSurfaceView.所以我的问题是:是否可以在不使用GLSurfaceView的情况下在Android上进行OpenGL渲染?喜欢直接渲染到位图,画布或某种缓冲/数组?

  6. android – 避免“没有EGLConfig找到!”错误

    我的一个用户报告我的游戏错误.我正在使用andengine作为我的引擎.这是错误.我的问题是,有什么可以做的,以避免这个错误?

  7. android – 使用MediaCodec录制曲面

    我将并行录制音频,使用FFMPEG合并该视频和音频,并将视频应用于视频.解决方法您可以在Grafika中看到一个完整的例子.特别地,“显示拍摄相机”活动将相机输出记录到.mp4.它也是demonstrates在GL着色器中应用一些简单的图像处理技术.它使用GLSurfaceView和复杂的舞蹈来保持记录的方向变化.也可能感兴趣的是,“使用FBO记录GL应用程序”活动记录OpenGLES呈现了几种不同的方式.它使用简单的SurfaceView,更直接.

  8. Android中SurfaceTexture TextureView SurfaceView GLSurfaceView的区别

    这篇文章主要介绍了Android中SurfaceTexture TextureView SurfaceView GLSurfaceView的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. Android OpenGL入门之GLSurfaceView

    这篇文章主要介绍了OpenGL入门知识,如何在Android中使用GLSurfaceView,如果对OpenGL感兴趣的同学,可以参考下

  10. 在Java应用程序中如何在Android上运行Lua脚本?

    我正在开发一个使用Lua脚本的Java中的Android游戏.要执行这些脚本,我使用LuaJ与Java的ScriptEngine类.例如…然而,这显然不是在Android上支持的.有没有办法在Android上使用Lua脚本?也许有一种使用LuaJ直接编译和执行Lua脚本的方法.FYI,当我尝试在Android上运行这个代码时,我看到这个错误:更新:也许这个项目有一些有用的代码?总结以上是DEVMAX为你收集整理的在Java应用程序中如何在Android上运行Lua脚本?

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部