我在ZoomableViewGroup中有一个GLTextureView,本质上是一个画布,可以使用缩放缩放手势进行缩放,并用两个手指进行平移 - 单指触摸用于在此画布上进行指纹绘制。在其上方的层上,存在包含预定义ImageView的片段,并且这些片段可以由用户随意添加和减去。它们也可以缩放和平移,但只有在它们被长按后才能进入可编辑模式。我的问题是:用户在实际尝试缩放他们所依赖的画布时,不小心长按其中一个片段是非常容易的。例如,如果用户将两根手指放在画布上,并且其中一根手指恰好落在其中一个片段上,那么app会将其读作两个单独的MotionEvent,每个只有一个指针,其中一个指向画布(绘制一些手指画而不是捏缩放),另一个去片段(它认为它被长按并切换到可编辑模式)。
因为两个手指放在不同的视图上,所以双指针手势被分成两个单指针手势!我通过在执行此操作时查询片段视图上的getPointerCount()
来验证这一点。我想把逻辑放入我的片段的onLongClick
方法中,该方法实质上是说“如果在屏幕上的任何地方放下第二个指针,那么什么都不做。”但我不确定如何从片段中检测到第二个指针。这可能吗?
Tl / dr:鉴于片段内视图上的触摸或长按事件,我需要检测指针的数量。但不仅仅是视图顶部的指针数量,在任何地方触摸屏幕的指针数量。这可能吗?
答案 0 :(得分:1)
可能在包含画布和片段的父视图中覆盖dispatchTouchEvent。您可以在那里处理触摸事件并随意处理它。如果有两个手指向下,可能会将事件传递给您的ZoomableViewGroup,如果只有1个,则将事件发送到您的片段和/或画布。
详细介绍了触控系统的工作原理以供参考: http://devsbuild.it/content/mastering-android-touch-system