2012-10-22 66 views
0

是否可以將觸摸事件傳遞給Android 4.0.3項目中新創建的SurfaceView。將TouchEvent傳遞給新創建的SurfaceView

讓我更精確。

我已經創建了一個處理傳入事件的自定義OnTouchListener。 ACTION_DOWN事件實例化一個自定義的SurfaceView,並將其添加到所有其他視圖之上(此工作正常)。 SurfaceView現在應該處理ACTON_MOVE並在ACTION_UP上通知監聽器。添加SurfaceView後,應刪除原始的OnTouchListener。

我試圖通過dispatchTouchEvent傳遞TouchEvent,但只有在連續執行時纔有效。是否有可能實現所描述的行爲,以及做到這一點的最佳方式是什麼?

此致敬禮和謝謝。

下面是一些代碼:

TouchListener:

OnTouchListener onTouchListener = new OnTouchListener() { 


    public boolean onTouch (View v, MotionEvent event) { 

     int action = event.getAction(); 

     switch (action) { 

     case MotionEvent.ACTION_DOWN: 
      surfaceView = new CustomSurfaceView(this.getActivity(), drawer); 
      surfaceView.setZOrderOnTop(true); 
      surfaceView.getHolder().setFormat(PixelFormat.TRANSPARENT); 

      overlayContainer.addView(surfaceView); 
      btnView.setOnTouchListener(null); 

      return surfaceView.dispatchTouchEvent(event);; 

     default: 
      return false; 
     } 
    } 
}; 


btnView.setOnTouchListener(onTouchListener); 

SurfaceView:

@Override 
public boolean onTouchEvent (MotionEvent event) { 

    switch (action) { 

    case MotionEvent.ACTION_MOVE: 

     x = (int) event.getX(); 
     y = (int) event.getY(); 

     return true; 

    case MotionEvent.ACTION_UP: 

     // TODO:notify Listener 
     return true; 


    default: 
     return false; 
    } 
} 
+0

請儘可能在您的問題中包含代碼,這樣人們更有可能爲您提供高質量的答案 – Sheena

回答

0

剛剛通過的TouchEvent到新創建的對象。在這個對象內,你應該檢查表面是否準備好。如果準備就緒,外傳類別也可以返回true等,否則傳遞true。

總是將觸發事件傳遞到梯子上,永遠不要讓它們從這裏發起。

+0

是否必須將ACTION_MOVE事件連續傳遞到surfaceView,並在我的自定義OnTouchListener中使用dispatchTouchEvent,或者是否存在一個避免這種情況的更好方法? – BauerMitFackel

+0

在我的三星s2上,如果我將手指拖過屏幕,每移動4個像素就會釋放一次touchevent(移動)。因此,用戶在顯示屏上移動手指會發生很多觸發事件,並且您應該將它們全部傳遞給需要它們的類 – NikkyD

+0

感謝您的幫助。 – BauerMitFackel

相關問題