onTouchEvent和onTouch区别,以及Gesture手势及手势库基本使用

一、onTouchEvent和onTouch 

在java的继承关系中,新的类称为子类,也叫派生类。


onTouchEvent和onTouch区别,以及Gesture手势及手势库基本使用_第1张图片

1.如果是直接重写父类onTouchEvent的方法,那么这个事件是针对当前整个页面,点击当前页面的任意位置,这个方法都会被回调,当然点到某个拥有监听事件的控件上面这个方法就无法回调。

1)这个方法最少都会被调用2次,一次是按下,一次抬起。

2)当你按住左右滑动的时候onTouchEvent会被一直调用,并且一直走到MotionEvent.ACTION_MOVE分支里面

3)如果点击到某个拥有监听事件的控件上面这个onTouchEvent就不会被回调了。如下图。


onTouchEvent和onTouch区别,以及Gesture手势及手势库基本使用_第2张图片

4)这个方法onTouchEvent的返回值要写成true,原因以后验证。

2.当如果这个类去实现这个接口,如图。


1)会实现一个方法,onTouch(View view,MotionEvent motionEvent)

2)这个方法不是针对当前页面的,所以如下图这样才会引起回调。


onTouchEvent和onTouch区别,以及Gesture手势及手势库基本使用_第3张图片

3)这个回调的方法和全局的ontouch一样的,有一点不一样的是,可以从view参数中判断是否是当前的控件的事件,和onCilck用法类是。如图。


onTouchEvent和onTouch区别,以及Gesture手势及手势库基本使用_第4张图片

总结,这就是针对当前页面的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和onTouch区别,以及Gesture手势及手势库基本使用_第5张图片

有一部需要注意,要在ontouchEvent方法里面,用手势对象去调用ontouchevent方法。不然无法使用手势库。


onTouchEvent和onTouch区别,以及Gesture手势及手势库基本使用_第6张图片

以上是针对整个屏幕的手势。

如果是针对单个控件的手势,只需要在ontouch()方法里面去调用detector.onToutchEvent(event).就可以了。如下图。使用很简单。


onTouchEvent和onTouch区别,以及Gesture手势及手势库基本使用_第7张图片

还有一点需要注意的是,因为是在ontouchevent()和ontouch()方法里面调用的ontouchevent(),所以如果这个控件也实现了点击事件,也活优先执行完手势事件,最后执行点击事件onClick();

你可能感兴趣的:(onTouchEvent和onTouch区别,以及Gesture手势及手势库基本使用)