对于(单个)触摸手势,有一个 GestureOverlayView 视图,可以放置在其他视图(Gridviews,Listviews ...)和空白空间中,仍然可以检测到正确触摸。
/编辑:更多规范
现在我正在这样做:
//setup listener
overlay = (GestureOverlayView) findViewById(R.id.CgestureOverlayView);
overlay.setGestureVisible(false);
overlay.addOnGesturePerformedListener(this);
但是当我使用GestureOverlayView时我必须实现这个
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture)
问题是我没有Raw手势文件,因为Gestures Builder不允许我构建多点触控手势。在哪里实现提到的MotionEvent处理?
我应该这样做,然后覆盖GestureOverlayView.onTouchEvent()吗? (或者我没有看到你的观点,因为即使没有GestureOverlayView你也可以使用OnTouchEvent)
public boolean onTouchEvent(MotionEvent ev) {
overlay.onTouchEvent(ev);
return true;
}
//编辑#2最后,我没有使用GestureOverlay,我从ListView中捕获了那些填充整个活动的MouseEvent。无论如何,当您拥有MotionEvents时,您不必定义自己的多点触控手势,而是可以使用 ScaleGestureDetector.SimpleOnScaleGestureListener 来处理此类事件。
答案 0 :(得分:1)
GestureOverlayView 可让您设置 GestureOverlayView.OnGestureListener 类型的侦听器。此接口中的方法将传递 GestureOverlayView 正在接收的原始 MotionEvent 。
从这些事件中,应该可以检测到所需的任何手势,甚至是多点触控手势。
编辑:而不是使用
overlay.addOnGesturePerformedListener(this);
你会用
overlay.addOnGestureListener(this);
这将为您提供可用于确定任何多点触控手势的原始MotionEvent 。从那里你需要自己跟踪触摸并找出多点触控手势何时发生以及发生了多少动作(我确定有大量的示例代码片段可用于缩放)
当然没有理由你不能编写自己的View类与 GestureOverlayView 做同样的事情,除了只有多点触控手势,但如果你还想要单触手势 GestureOverlayView 提供的行为,然后这个方法允许您只需添加所需的多点触控支持。