如何防止将拖动(或捏合)的末端传递给例如手指下方的按钮?

How to prevent the end of drag (or pinch) from being passed to e.g. buttons below the fingers?

我已经实现了自己对 PinchOut 的支持(如之前 SO question 中所提议的那样)以将元素插入到列表中。要插入元素,我还需要检测列表顶部的捏合,一根手指放在标题栏上。我通过覆盖将执行插入等操作的 Form.pointerDragged(int[] x, int[] y) 和调用的 'consumes' 来完成此操作(通过不调用 super.Form.pointerDragged(int[] x, int[] y))。但是,当松开两根手指时,有时会触发其中一根手指下方的动作,例如标题栏命令或列表元素中的按钮。有没有办法避免这种情况?

您还需要覆盖 pointerReleased。如果发生捏合操作,您需要检测到它,然后在 pointerReleased 内执行:

 public pointerReleased(int[] x, int[] y) {
      if(pinch) return;
      super.pointerReleased(x, y);
 }

 public pointerReleased(int x, int y) {
      if(pinch) return;
      super.pointerReleased(x, y);
 }

请注意,您需要为这两种方法执行此操作,因为有些 OS 发送数组版本,有些发送回调的 int 版本。