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 に答える