【发布时间】: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似乎只有在软键盘弹出屏幕时才会出现。
我尝试在
onSurfaceChanged和onSizeChanged中放置一个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