OpenGLRenderer中的onTouchEvent?

时间:2012-12-24 12:58:36

标签: android opengl-es

我创建了一个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;
}

仍然不起作用:/ 怎么了?

2 个答案:

答案 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 ;
    }
}