前面我们假设参数ev描写叙述的是一个ACTION_MOVE类型的Touch事件。
GestureDetector类的成员函数OnTouchEvent首先会计算这个Touch事件的位置(focus_x,focus_y)。注意,这个Touch事件可能包括了多个触摸点。因此在计算它的位置时,通过将全部的触摸点进行算术平均得到。
GestureDetector类的成员变量last_focus_x_和last_focus_y_记录的是上一个类型为ACTION_MOVE的Touch事件的位置(last_focus_x_, last_focus_y_)。GestureDetector类的成员函数OnTouchEvent通过比较(last_focus_x_, last_focus_y_)和(focus_x,focus_y)的值,得到连续两个类型为ACTION_MOVE的Touch事件在网页的X轴和Y轴上所产生的滑动量scroll_x和scroll_y。
GestureDetector类的成员变量is_double_tapping_是一个布尔变量。当它的值等于true的时候。表示用户在规定的时间和空间内连续点击了两次网页。
这样的情况称为Double Tap,这时候GestureDetector类的成员函数OnTouchEvent会将参数ev描写叙述的类型为ACTION_MOVE的Touch事件交给成员变量double_tap_listener_指向的一个DoubleTapListener对象的成员函数OnDoubleTapEvent处理。
也就是说,Double Tap之后的类型为ACTION_MOVE的Touch事件将不会产生滑动手势操作。
GestureDetector类的成员变量always_in_tap_region_也是一个布尔变量。当它的值等于true的时候,表示用户之前触发了一个类型为ACTION_DOWN的Touch事件。在这样的情况下,GestureDetector类的成员函数OnTouchEvent须要计算当前发生的类型为ACTION_MOVE的Touch事件与之前触发的类型为ACTION_DOWN的Touch事件的位置距离。当这个距离大于预设的值之时,GestureDetector类的成员变量always_in_tap_region_会被重置为false,表示后面触发类型为ACTION_UP的Touch事件时,不要产生一个Single Tap事件。与此同一时候,须要产生一个滑动手势操作。这个滑动手势操作通过调用GestureDetector类的成员变量listener_描写叙述的一个GestureListener对象的成员函数OnScroll进行处理。
从前面的分析我们能够看出,Single Tap事件与滑动手势操作是相互排斥的。一个Single Tap事件指的是指在规定时间和空间内先后发生了一个类型为ACTION_DOWN的Touch事件和一个类型为ACTION_UP的Touch事件。在这两个Touch事件之间发生的类型为ACTION_MOVE的Touch事件将不会产生手势操作。
当GestureDetector类的成员变量is_double_tapping_和always_in_tap_region_的值都等于false的时候。GestureDetector类的成员函数OnTouchEvent检查连续两个类型为ACTION_MOVE的Touch事件在网页的X轴和Y轴上所产生的滑动量scroll_x和scroll_y是否超过了预设的阀值。假设超过了,那么就觉得产生了一个滑动手势操作。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-81055-10.html
美国连家庭住宅都不可侵犯
教授可否同意
加油↖