0

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

还是不行:/怎么了?

4

2 回答 2

1

来自 GLSurfaceView文档:“在处理事件时,您可能需要与在渲染线程中运行的 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;
}
于 2012-12-24T13:09:52.543 回答
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 ;
    }
}
于 2013-07-02T10:18:57.283 回答