2012-10-22 34 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

相关问题