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手势操作接口的实现类,并重写这些方法,如果一些手势不需要处理,则无需进行重写。
2、OnDoubleTapListener使用过程
OnDoubleTapListener主要是针对单击、双击事件的处理接口,同样位于GestureDetector中,使用方法与前者相似,使用时只需要为GestureDetector实例注册OnDoubleTapListener的具体实现类即可,代码如下所示。
一、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实现复杂且灵活的事件处理奠定基础。
相关文章推荐
- 3自定义View系列课程学习笔记——之Measure测量
- 2自定义View系列课程学习笔记——之Scroller和ViewDragHelper
- Android官方开发文档Training系列课程中文版:手势处理之ViewGroup的事件管理
- ios学习笔记----实现一个带滑动手势的tabBarViewController,并可自定义tabBar
- 【学习】构建WCF面向服务的应用程序系列课程笔记:(3)契约版本处理
- Android官方开发文档Training系列课程中文版:手势处理之ViewGroup的事件管理
- Visual C++ 2005 系列课程学习笔记-2
- c++学习系列笔记之数据处理(总括)
- Visual C++ 2005 系列课程学习笔记-8
- ogre 学习笔记系列(二)三大模块及事件处理
- APIDemo学习笔记——在XML中使用自定义的View类
- C++学习系列笔记之数据处理(整形数据)
- struts2系列学习笔记(7)---------------其它形式的结果处理
- Visual C++ 2005 系列课程学习笔记-1
- iPhone开发学习笔记005——使用XIB自定义一个UIView,然后将这个view添加到controller的view
- struts2系列学习笔记(8)---------------类型转换的错误处理
- Visual C++ 2005 系列课程学习笔记-5
- Visual C++ 2005 系列课程学习笔记-6
- 公共语言运行库(CLR)开发系列课程___学习笔记(1)
- [CSharp]C#2.0 锐利体验系列课程 (1):泛型编程-学习笔记