【问题标题】:Android pinch-zoom and long-click conflict between viewsAndroid捏缩放和长按视图之间的冲突
【发布时间】:2014-09-09 04:35:42
【问题描述】:

我在 ZoomableViewGroup 中有一个 GLTextureView,本质上是一个画布,可以使用捏拉缩放手势进行缩放并用两根手指平移——单指触摸用于在此画布上进行手指绘画。在其上方的层上,有一些片段保存着预定义的 ImageView,这些片段可以由用户随意添加和减去。它们也可以缩放和平移,但只有在它们被长按后才能进入可编辑模式。我的问题是:用户在实际尝试缩放他们所在的画布时,很容易意外地长按其中一个片段。例如,如果用户将两根手指放在画布上,而其中一根手指碰巧落在其中一个片段上,则应用程序会将其读取为两个单独的 MotionEvent,每个都只有一个指针,其中一个指向画布(绘制一些手指画而不是捏缩放),另一个转到片段(认为它被长按并切换到可编辑模式)。

由于两根手指分别放在不同的视图上,所以将两指手势分为两个单指手势!我通过在执行此手势时在片段视图上查询getPointerCount() 来验证这一点。我想将逻辑放入我的片段的onLongClick 方法中,该方法基本上说“如果在屏幕上的任何地方放下第二个指针,则什么也不做。”但我不确定如何从片段中检测到第二个指针。这可能吗?

Tl/dr: 给定片段内视图上的触摸或长按事件,我需要检测指针的数量。但不仅仅是视图顶部的指针数量,还有在任何地方触摸屏幕的指针数量。这可能吗?

【问题讨论】:

    标签: android android-event


    【解决方案1】:

    也许在包含您的画布和片段的父视图中覆盖 dispatchTouchEvent。您可以在那里处理触摸事件并随心所欲地处理它。如果有 2 个手指向下,则可能将事件传递给您的 ZoomableViewGroup,如果只有 1 个手指,则将事件发送到您的片段和/或画布。

    http://developer.android.com/reference/android/view/ViewGroup.html#dispatchTouchEvent(android.view.MotionEvent)

    触摸系统工作原理的一个很好的概述供参考: http://devsbuild.it/content/mastering-android-touch-system

    【讨论】:

      猜你喜欢
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多