您的位置:首页 > 其它

1自定义View系列课程学习笔记——之手势处理

2017-06-16 22:58 344 查看
1自定义View系列课程学习笔记——之手势处理

一、Configuration特点

Configuration主要用来描述设备的配置信息,也可用来描述设备本身的信息,如输入模式、屏幕方向、屏幕大小等等。

二、ViewConfiguration特点

虽然ViewConfiguration与Configuration在命名上非常像,但这两者的作用却不同,它们之间也没任何的继承关联。ViewConfiguration主要用于检查UI超时、滑动距离等。

在ViewConfiguration中,也提供了相关基准值的检测方法,针对一个视图而言,当系统接收到用户事件时,会根据ViewConfiguration的相关方法,来判断当前事件以及事件转换等。以下是ViewConfiguration中的相关方法,例如对滑动事件的处理、双击间隔时间等等。



三、GestureDetector特点

GestureDetector主要用于简化用户Touch事件的处理,View中虽然提供了对onTouch事件的捕获,并且可以通过重写onTouch来进行事件处理,但是,针对一些复杂的手势操作,如果仅通过重写onTouch,代码实现起来会非常复杂且繁琐,并且难以避免View存在一些Bug。而GestureDetector是专门用于处理复杂手势的操作接口,使用时通过GestureDetector可以自动识别出很多复杂手势,如按下、长按、按下后快速移动松开、单击屏幕等,这些复杂的手势,如果仅通过onTouch实现,将会非常困难,而SDK通过GestureDetector中的OnGestureListener接口,可以直接向开发人员返回当前View的事件执行情况,通过重写OnGestureListener接口的相关方法,可轻松处理各种复杂的View事件,使代码更加专注于客户端的业务逻辑。

OnGestureListener有下面的几个动作:

按下(onDown): 刚刚手指接触到触摸屏的那一刹那,就是触的那一下。

抛掷(onFling): 手指在触摸屏上迅速移动,并松开的动作。

长按(onLongPress): 手指按在持续一段时间,并且没有松开。

滚动(onScroll): 手指在触摸屏上滑动。

按住(onShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。

抬起(onSingleTapUp):手指离开触摸屏的那一刹那。

1、OnGestureListener使用过程

第一步:首先创建一个OnGestureListener手势操作接口的实现类,并重写这些方法,如果一些手势不需要处理,则无需进行重写。



第二步:初始化控件,然后初始化GestureDetector,并在GestureDetector构建时,将OnGestureListener接口的实现类添加进去。最后,执行控件的onTouchListener事件的注册,并在重写的onTouch方法中,通过GestureDetector对touch事件进行onTouchEvent派发,使MotionEvent被GestureDetector所消费,代码如下所示。




关于OnGestureListener接口对用户触摸手势的处理,代码如下所示,接口回调方法可分别用于处理不同的手势操作。




2、OnDoubleTapListener使用过程

OnDoubleTapListener主要是针对单击、双击事件的处理接口,同样位于GestureDetector中,使用方法与前者相似,使用时只需要为GestureDetector实例注册OnDoubleTapListener的具体实现类即可,代码如下所示。

在OnDoubleTapListener接口的具体实现类中,需要重写三个方法,它们分别是onSingleTapConfirmed(MotionEvent e)、onDoubleTap(MotionEvent e)和onDoubleTapEvent(MotionEvent e)。
其中,onSingleTapConfirmed(MotionEvent e) 单击事件。用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势,如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。触发顺序是:OnDown->OnsingleTapUp->OnsingleTapConfirmed
关于onSingleTapConfirmed和onSingleTapUp的一点区别: OnGestureListener有这样的一个方法onSingleTapUp,和onSingleTapConfirmed容易混淆。二者的区别是:onSingleTapUp,只要手抬起就会执行,而对于onSingleTapConfirmed来说,如果双击的话,则onSingleTapConfirmed不会执行。
onDoubleTap(MotionEvent e)为双击事件。
onDoubleTapEvent(MotionEvent e) 双击间隔中发生的动作。指触发onDoubleTap以后,在双击之间发生的其它动作,包含down、up和move事件。
通过GestureDetector这个官方API,可以大幅度降低对View的手势处理,使客户端不再针对MotionEvent进行直接的事件处理,而是由GestureDetector进行派发,当用户手势符合GestureDetector实例中添加的事件监听后,可以直接在GestureDetector中添加的事件具体实现中进行直接处理,这样做的目的使事件处理更加灵活,并且GestureDetector可以按需定制,为View实现复杂且灵活的事件处理奠定基础。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: