【问题标题】:Android openGL black square bugAndroid openGL黑色方块bug
【发布时间】:2014-08-19 00:13:09
【问题描述】:

我目前遇到一个问题。 我在使用 Java 的 Eclipse IDE 和 API 19 上工作。 我已经完成了一个包含一些布局的活动。我已经在其中一个布局中放入了一个继承自 GLSurfaceView 的自定义类,以便为用户提供 3D 渲染。 但实际上我在特定设备上遇到了问题,即适用于 Android 4.04 的“Epson moverio”眼镜。 当软键盘弹出时,它会显示GLSurfaceView 以及一个与GLSurfaceView 尺寸相同的黑色方块,并且这个黑色方块与GLSurfaceView 相邻。我不明白为什么我有这个错误,因为它在三星平板电脑等经典设备上运行良好,而且我有另一个版本的视图,我使用画布在其上绘制 2D 形状,而且我没有遇到黑色方块问题,它似乎这种问题只发生在 openGL 渲染上下文中(我使用的是 openGL 2.0 ES)。

  • 这个bug似乎只有在软键盘弹出屏幕时才会出现。

  • 我尝试在onSurfaceChangedonSizeChanged 中放置一个invalidate() 和一个forceLayout 函数调用,但它不起作用。

  • 我指出该错误仅出现在“Epson moverio”眼镜上,我不明白为什么。

  • 这是构建我自己的继承自 GLSurfaceView 的类并将其放入 Activity 的布局以显示 3D 的好方法,还是有其他更好的方法来实现这种功能?

这是我的 GLSurfaceView 类实现的一些 sn-p 代码

@Override
public void onDrawFrame(GL10 gl) {
    // TODO Auto-generated method stub
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

    long time = SystemClock.uptimeMillis() % 10000L;
    float angleInDegrees = (360.0f / 10000.0f) * ((int) time);

    if (_trolleyContentInfoList != null && _trolleyCaracteristics != null) {
        _matrixTools.loadIndentity(MatrixType.MODEL_MATRIX);
        drawTrolleyStructure(angleInDegrees);
        drawTrolleyShelves(angleInDegrees);
        //drawTrolleyWheels(angleInDegrees);
    }
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    // TODO Auto-generated method stub
    GLES20.glViewport(0, 0, width, height);
    float aspect = (float)width / height;
    float fovy = 60.0f;
    float near = 0.1f;
    float far = 10.0f;

    _width = width;
    _height = height;
    _matrixTools.loadIndentity(MatrixType.PROJECTION_MATRIX);
    _matrixTools.perspective(MatrixType.PROJECTION_MATRIX, fovy, aspect, near, far);
    this.forceLayout();
}

@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
    this.forceLayout();
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    GLES20.glClearColor(0.8f, 0.8f, 0.8f, 0.0f);
    GLES20.glEnable(GLES20.GL_DEPTH_TEST);
    _matrixTools.loadIndentity(MatrixType.VIEW_MATRIX);
    _matrixTools.lookAt(MatrixType.VIEW_MATRIX, 0.0f, 0.0f, -2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
    _matrixTools.loadIndentity(MatrixType.MODEL_MATRIX);
    _cubeDrawer = new CubeDrawer();
    _cubeDrawer.initialize();
}

最后,这是我的自定义类从 GLSurfaceView 继承的方式

public class Trolley3DView extends GLSurfaceView implements GLSurfaceView.Renderer, ITrolleyPreviewView{
}

编辑:好的,经过测试,我发现黑色方块在 Activity 中的 TextView 中输入内容后消失了。我必须明白我应该使 Activity 无效以便在软键盘弹出时强制它刷新吗?

【问题讨论】:

    标签: java android opengl-es android-softkeyboard


    【解决方案1】:

    好的,我终于找到了错误的原因。您必须设置显示 openGL 内容的 View 的颜色,黑色方块会神奇地消失。

    【讨论】:

    • 我也有同样的问题。黑色方块问题真的解决了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多