多点视图的多点触控

时间:2014-10-17 23:27:13

标签: android multi-touch

对于(单个)触摸手势,有一个 GestureOverlayView 视图,可以放置在其他视图(Gridviews,Listviews ...)和空白空间中,仍然可以检测到正确触摸。

  • 如何为多点触控(捏合/缩小)手势制作此类内容?过度 空活动空间可以完成 ScaleGestureDetector.SimpleOnScaleGestureListener ,但如果我想要的话 例如,在列表上使用这样的手势?
  • 我是否必须为内部的每个视图实现ScaleGesture检测器 明确的活动还是有任何更聪明的方式这样做?

/编辑:更多规范

现在我正在这样做:

 //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 来处理此类事件。

1 个答案:

答案 0 :(得分:1)

GestureOverlayView 可让您设置 GestureOverlayView.OnGestureListener 类型的侦听器。此接口中的方法将传递 GestureOverlayView 正在接收的原始 MotionEvent

从这些事件中,应该可以检测到所需的任何手势,甚至是多点触控手势。

编辑:而不是使用

overlay.addOnGesturePerformedListener(this);

你会用

overlay.addOnGestureListener(this);

这将为您提供可用于确定任何多点触控手势的原始MotionEvent 。从那里你需要自己跟踪触摸并找出多点触控手势何时发生以及发生了多少动作(我确定有大量的示例代码片段可用于缩放)

当然没有理由你不能编写自己的View类与 GestureOverlayView 做同样的事情,除了只有多点触控手势,但如果你还想要单触手势 GestureOverlayView 提供的行为,然后这个方法允许您只需添加所需的多点触控支持。