一、onTouchEvent和onTouch
在java的继承关系中,新的类称为子类,也叫派生类。
1.如果是直接重写父类onTouchEvent的方法,那么这个事件是针对当前整个页面,点击当前页面的任意位置,这个方法都会被回调,当然点到某个拥有监听事件的控件上面这个方法就无法回调。
1)这个方法最少都会被调用2次,一次是按下,一次抬起。
2)当你按住左右滑动的时候onTouchEvent会被一直调用,并且一直走到MotionEvent.ACTION_MOVE分支里面
3)如果点击到某个拥有监听事件的控件上面这个onTouchEvent就不会被回调了。如下图。
4)这个方法onTouchEvent的返回值要写成true,原因以后验证。
2.当如果这个类去实现这个接口,如图。
1)会实现一个方法,onTouch(View view,MotionEvent motionEvent)
2)这个方法不是针对当前页面的,所以如下图这样才会引起回调。
3)这个回调的方法和全局的ontouch一样的,有一点不一样的是,可以从view参数中判断是否是当前的控件的事件,和onCilck用法类是。如图。
总结,这就是针对当前页面的ontouchEvent()事件方法和针对控件的ontouch()事件方法。
如果一个控件同时实现了ontouch()和onClick()事件,那么这2个方法都会被同时调用,
但是顺序是,先调用玩ontouch()后(最少2次),才会调用onClick()
2个方法的返回值,true都是代表了消费这个事件,false都是代表没有消费此事件
二、Gesture手势及手势库;
OnTouch提供的事件还是相对较简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦,因为我们要根据用户触摸的轨迹去判断是什么手势。Androidsdk给我们提供了GestureDetector(Gesture:手势Detector:识别)类,通过这个类我们可以识别很多的手势。
GestureDetector类对外提供了两个接口:OnGestureListener,OnDoubleTapListener,还有一个内部类SimpleOnGestureListener;SimpleOnGestureListener类是GestureDetector提供给我们的一个更方便的响应不同手势的类,它实现了上述两个接口,该类是static class,也就是说它实际上是一个外部类,我们可以在外部继承这个类,重写里面的手势处理方法。因此实现手势识别有两种方法,一种实现OnGestureListener接口,另一种是使用SimpleOnGestureListener类。
OnGestureListener有下面的几个动作:
按下(onDown): 刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
抛掷(onFling): 手指在触摸屏上迅速移动,并松开的动作。
长按(onLongPress): 手指按在持续一段时间,并且没有松开。
滚动(onScroll): 手指在触摸屏上滑动。
按住(onShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。
抬起(onSingleTapUp):手指离开触摸屏的那一刹那。
(一)、操作步骤:
1、在Activity中实例化GestureDetector,一个GestureDetector实例代表一个手势检测器;
2、构建GestureDetector时需要一个参数GestureDetector.OnGestureListener。OnGestureListener是一个监听器,负责对用户的手势行为提供相应。
3、重写onToutchEvent()方法,返回detector.onToutchEvent(event).
有一部需要注意,要在ontouchEvent方法里面,用手势对象去调用ontouchevent方法。不然无法使用手势库。
以上是针对整个屏幕的手势。
如果是针对单个控件的手势,只需要在ontouch()方法里面去调用detector.onToutchEvent(event).就可以了。如下图。使用很简单。
还有一点需要注意的是,因为是在ontouchevent()和ontouch()方法里面调用的ontouchevent(),所以如果这个控件也实现了点击事件,也活优先执行完手势事件,最后执行点击事件onClick();