2013-05-04 13 views
1

系統在我的應用程序中未調用onTouchEvent。 我已經嘗試在活動,視圖和呈現器中使用onTouchEvent實現它。他們都沒有被召喚。 所以我嘗試了dispatchTouchEvent活動和視圖,仍然沒有得到調用。 它基於San Angeles NDK樣本,我編譯並正確檢測觸摸。無法在GLSurfaceView上獲取android touch事件

以下是完整的java源代碼,其他一切都是原生C++。


package com.example.SanAngeles; 
    import javax.microedition.khronos.egl.EGLConfig; 
    import javax.microedition.khronos.opengles.GL10; 

    import android.app.Activity; 
    import android.content.Context; 
    import android.opengl.GLSurfaceView; 
    import android.os.Bundle; 
    import android.view.MotionEvent; 

    public class DemoActivity extends Activity { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      mGLView = new DemoGLSurfaceView(this); 
      setContentView(mGLView); 
     } 

     @Override 
     protected void onPause() { 
      super.onPause(); 
      mGLView.onPause(); 
     } 

     @Override 
     protected void onResume() { 
      super.onResume(); 
      mGLView.onResume(); 
     } 

     private DemoGLSurfaceView mGLView; 

     static { 
      System.loadLibrary("Android"); 
     } 
    } 

    class DemoGLSurfaceView extends GLSurfaceView { 
     public DemoGLSurfaceView(Context context) { 
      super(context); 
      mRenderer = new DemoRenderer(); 
      mRenderer.context = context; 
      setRenderer(mRenderer); 
     } 
     @Override 
     public boolean onTouchEvent(final MotionEvent event) { 
      System.out.println("onTouchEvent"); 
      System.out.println("Motion Event" + event.getAction()); 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       System.out.println("ACTION DOWN"); 
       final int pointerCount = event.getPointerCount(); 
       System.out.println("down pcount:" + pointerCount); 
       for(int i = 0; i < pointerCount; i++) 
       { 
        System.out.println("Touch x:" + event.getX(i) + "y:" + event.getY(i)); 
        int id = event.getPointerId(i); 
        nativeTouchDown(id, (int)event.getX(i), (int)event.getY(i)); 
       } 
      } 
      if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { 
       final int pointerCount = event.getPointerCount(); 
      System.out.println("up pcount:" + pointerCount); 

       for(int i = 0; i < pointerCount; i++) 
       { 
        int id = event.getPointerId(i); 
        nativeTouchUp(id); 
       } 
      } 
      if (event.getAction() == MotionEvent.ACTION_MOVE) { 
       final int pointerCount = event.getPointerCount(); 
      System.out.println("move pcount:" + pointerCount); 

       for(int i = 0; i < pointerCount; i++) 
       { 
        int id = event.getPointerId(i); 
        nativeTouchMove(id, (int)event.getX(i), (int)event.getY(i)); 
       } 
      } 
      return true; 
     } 

     DemoRenderer mRenderer; 

     private static native void nativePause(); 
    } 

    class DemoRenderer implements GLSurfaceView.Renderer { 
     Context context; 
     Object am; 
     public void onSurfaceCreated(GL10 gl, EGLConfig config) { 

      am = (Object)context.getAssets(); 
      System.out.println("HDROP:\n AssetManager:" + am); 
      nativeInit(am, 500,500); 
     } 

     public void onSurfaceChanged(GL10 gl, int w, int h) { 
      //gl.glViewport(0, 0, w, h); 
      System.out.println("Hdrop surface changed"); 
      nativeResize(w, h); 
     } 

     public void onDrawFrame(GL10 gl) { 
      nativeRender(); 
     } 

     private static native void nativeInit(Object assetManager, int w, int h); 
     private static native void nativeTouchDown(int id, int x, int y); 
     private static native void nativeTouchUp(int id); 
     private static native void nativeTouchMove(int id, int x, int y); 
     private static native void nativeResize(int w, int h); 
     private static native void nativeRender(); 
     private static native void nativeDone(); 
    } 

回答

2

onTouch作品無處不在,你想(即如果它的活性或視圖)只要你聲明的接口,並把監聽器吧!在另一方面的onTouchEvent一種觀點

換句話說內唯一的工作,onTouch()用於通過查看的用戶獲得的觸摸事件而的onTouchEvent()所使用的派生類查看獲得觸摸事件

嘗試,與onTouch取代的onTouchEvent ..

希望這有助於

+0

我終於能得到它通過調用mGLView.setOnTouchListener(myListener)來工作。謝謝! – agoaj 2013-05-04 06:45:51

相關問題