我创建了一个OpenGL渲染器
public class OpenGLRenderer implements Renderer {
现在我想从onTouchEvent获取数据。 不幸的是,它不起作用:
public boolean onTouchEvent(MotionEvent event){
//eyeX += 0.2f;
//eyeY = 0.2f;
eyeZ -= 0.2f;
Log.v("OpenGLRenderer", "TouchEvent works");
return true;
}
当我将课程改为:
public class OpenGLRenderer extends GLSurfaceView implements Renderer {
和我的onTouchEvent函数:
@Override
public boolean onTouchEvent(MotionEvent event){
//eyeX += 0.2f;
//eyeY = 0.2f;
eyeZ -= 0.2f;
Log.v("OpenGLRenderer", "TouchEvent works");
return true;
}
仍然不起作用:/ 怎么了?
答案 0 :(得分:1)
从GLSurfaceView documentation:“处理事件时,您可能需要与渲染线程中运行的Renderer对象进行通信。”
使用queueEvent(Runnable)
将事件传递给渲染线程:
@override
public boolean onTouchEvent(MotionEvent event){
queueEvent(new Runnable() {
// This method will be called on the rendering
// thread:
public void run() {
eyeZ -= 0.2f;
Log.v("OpenGLRenderer", "TouchEvent works");
}});
return true;
}
答案 1 :(得分:0)
这是针对MyGLSurfaceview类的.. 当您触摸屏幕时,您将获得该位置x,y位置范围。
@Override
public boolean onTouchEvent(MotionEvent ev) {
// Normal touch
xPosition = ev.getX();
yPosition = ev.getY();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:{
dx = ev.getX();
dy = ev.getY();
}
return ;
}
}