您的位置 首页 新品

GestureDetector类及其用法

当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTou

当用户接触屏幕的时分,会产生许多手势,例如down,up,scroll,filing等等。

一般情况下,咱们知道View类有个View.OnTouchListener内部接口,经过重写他的onTouch(View v, MotionEvent event)办法,咱们能够处理一些touch事情,可是这个办法过分简略,假如需求处理一些杂乱的手势,用这个接口就会很费事(由于咱们要自己依据用户接触的轨道去判别是什么手势)。

Android sdk给咱们供给了GestureDetector(Gesture:手势Detector:辨认)类,经过这个类咱们能够辨认许多的手势,主要是经过他的onTouchEvent(event)办法完成了不同手势的辨认。尽管他能辨认手势,可是不同的手势要怎样处理,应该是供给给程序员完成的。

GestureDetector这个类对外供给了两个接口:OnGestureListener,OnDoubleTapListener,还有一个内部类SimpleOnGestureListener。

GestureDetector.OnDoubleTapListener接口:用来告诉DoubleTap事情,类似于鼠标的双击事情。

1,onDoubleTap(MotionEvent e):在双击的第二下,Touch down时触发 。

2,onDoubleTapEvent(MotionEvent e):告诉DoubleTap手势中的事情,包括down、up和move事情(这儿指的是在双击之间产生的事情,例如在同一个当地双击会产生DoubleTap手势,而在DoubleTap手势里边还会产生down和up事情,这两个事情由该函数告诉);双击的第二下Touch down和up都会触发,可用e.getAction()区别。

3,onSingleTapConfirmed(MotionEvent e):用来断定该次点击是SingleTap而不是DoubleTap,假如接连点击两次便是DoubleTap手势,假如只点击一次,体系等候一段时间后没有收到第2次点击则断定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事情。这个办法不同于onSingleTapUp,他是在GestureDetector坚信用户在第一次接触屏暗地,没有紧跟着第2次接触屏幕,也便是不是“双击”的时分触发

GestureDetector.OnGestureListener接口:用来告诉一般的手势事情,该接口有如下六个回调函数:

1. onDown(MotionEvent e):down事情;

2. onSingleTapUp(MotionEvent e):一次点击up事情;在touch down后又没有滑动

(onScroll),又没有长按(onLongPress),然后Touchup时触发。

点击一下非常快的(不滑动)Touchup:

onDown->onSingleTapUp->onSingleTapConfirmed

点击一下略微慢点的(不滑动)Touchup:

onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

3. onShowPress(MotionEvent e):down事情产生而move或则up还没产生前触发该

事情;Touch了还没有滑动时触发(与onDown,onLongPress)比较onDown只需Touch down必定马上触发。而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。所以Touchdown后一向不滑动

依照onDown->onShowPress->onLongPress这个次序触发。

4. onLongPress(MotionEvent e):长按事情;Touch了不移动一向Touch down时触发

5. onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手

势事情;Touch了滑动一点间隔后,在ACTION_UP时才会触发

参数:e1 第1个ACTION_DOWN MotionEvent 而且只要一个;e2 最终一个ACTION_MOVE MotionEvent ;velocityX X轴上的移动速度,像素/秒 ;velocityY Y轴上的移动速度,像素/秒.触发条件:X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒

6. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上

拖动事情。无论是用手拖动view,或许是以抛的动作翻滚,都会屡次触发,这个办法在ACTION_MOVE动作产生时就会触发

抛:手指牵动屏暗地,略微滑动后当即松开

onDown—–》onScroll—-》onScroll—-》onScroll—-》………—–>onFling

拖动

onDown——》onScroll—-》onScroll——》onFiling

SimpleOnGestureListener类是GestureDetector供给给咱们的一个更便利的呼应不同手势的类,这个类完成了上述两个接口(可是一切的办法体都是空的),该类是static class,也便是说它实际上是一个外部类。程序员能够在外部承继这个类,重写里边的手势处理办法。

办法过程

第一种示例:

1,经过GestureDetector的结构办法能够将SimpleOnGestureListener目标传递进去,这样GestureDetector能处理不同的手势了。

public GestureDetector

(Context context, GestureDetector.OnGestureListener listener)

2,在OnTouchListener的onTouch办法中

private OnTouchListener gestureTouchListener = new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

return gDetector.onTouchEvent(event);

}

};

第二种示例:

使用办法

private GestureDetector mGestureDetector;

mGestureListener = new BookOnGestureListener();

结构出来mGestureDetector = new GestureDetector(mGestureListener);

class BookOnGestureListener implements OnGestureListener {

一起要public boolean onTouchEvent(MotionEvent event) {

mGestureListener.onTouchEvent(event);

}

第三种示例代码

代码:

01.private GestureDetector mGestureDetector;

02.@Override

03.public void onCreate(Bundle savedInstanceState) {

04. super.onCreate(savedInstanceState);

05. mGestureDetector = new GestureDetector(this, new LearnGestureListener());

06.}

07.@Override

08.public boolean onTouchEvent(MotionEvent event) {

09. if (mGestureDetector.onTouchEvent(event))

10. return true;

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/298083.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部