我使用SimpleOnGestureListener来检测onSingleTapUp事件和视图。
视图的比例因子为5,因此1个屏幕像素对应于我视图中的5个像素:
view.setScaleX(5);
view.setScaleY(5);
我面临的问题是未能准确检测到Tap事件。我查看了SimpleOnGestureListener
的源代码,相关部分是:
我认为无法可靠地检测到Tap的原因是触摸点的距离计算依赖于视图的缩放本地坐标(e.getX()
和e.getY()
)而不是原始坐标(e.getRawX()
和e.getRawY()
)。
由于比例因素,屏幕上手指的微小移动会导致e.getX()
和e.getY()
发生较大变化。
我对代码的解释是否正确?如果是这样,我该如何解决这个问题?
现在,我的解决方法是拦截View
上没有比例因子的所有事件,然后将MotionEvents
自己发送到具有比例因子的视图。
效果很好,如果我对Android代码的分析是否正确,我仍然感兴趣。
我正在使用android 4.4
答案 0 :(得分:1)
恕我直言,您对代码的分析是正确的!
只是在探索源代码时发现了一些其他信息:
mTouchSlopSquare
中定义的距离并初始化here(存储为原始值的平方,仅用于优化)echo off
的构造函数(应该是,因为第二个已过时),那么根据this line 作为解决方法,我建议您访问GestureDetector
的私人成员com.android.internal.R.dimen.config_viewConfigurationTouchSlop
,并在此距离计算中添加比例因子。
请参阅下面的代码:
mTouchSlopSquare
GestureDetector
我已经检查过,它对我有用。