我目前遇到问题。
我使用Java使用带有Eclipse IDE的API 19在Android上工作。
我做了一个包含一些布局的活动。我在其中一个布局中添加了一个自定义类,它继承自GLSurfaceView
,以便为用户提供3D渲染。
但实际上我在特定设备上遇到了问题,“Epson moverio”眼镜适用于Android 4.04。
当软键盘弹出时,它会显示GLSurfaceView
以及与GLSurfaceView
具有相同尺寸的黑色方块,并且此黑色方块与GLSurfaceView
相邻。我不明白为什么我有这个错误,因为它在三星平板电脑等经典设备上运行良好,我有另一个版本的视图,我用画布绘制2D形状,我没有得到黑方问题,它似乎这种问题只发生在openGL渲染上下文中(我使用的是openGL 2.0 ES)。
似乎只有当软键盘在屏幕上弹出时才会出现此错误。
我尝试在invalidate()
和onSurfaceChanged
中设置onSizeChanged
和forceLayout函数调用,但它不起作用。
我指出这个错误只发生在“Epson moverio”眼镜上,我不明白为什么。
这是一个很好的方法来构建我自己的继承自GLSurfaceView
的类,并将其放入Activity的布局中以显示3D,还是有另一种更好的方法来实现这种功能?
以下是我的GLSurfaceView
类实现
@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{
}
编辑:好的,经过一次测试后,我看到黑色方块在活动中的TextView中输入内容后消失了。我必须明白我应该使活动无效,以便在软键盘弹出时强制它刷新吗?
答案 0 :(得分:0)
好的,我终于找到了这个bug的原因。你必须设置显示openGL内容的View的颜色,黑色方块将神奇地消失。