
一、GestureDetector手势检测
概述:
当用户触摸屏幕的时候,会产生许多手势,如 down、up 、scroll 、fling等。
GestureDetector(手势检测)类,通过这个类可以识别很多手势。在识别出于势之后,具体的事务处理则交 由程序员自己来实现。
GestureDetector.OnGestureListener接口:
1.基本讲解
如果我们写一个类并继承自OnGestureListener,则会提示有几个必须重写的函数。
private class gesturelistener implements GestureDetector.OnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// TODO Auto-generated method stub
return false;
}
}
这里重写 了 6 个函数,这些函数在什么情况下才会被触发呢?
• onDown(MotionEvent e):用户按下屏幕就会触发该函数。
• onShowPress(MotionEvent e):如果按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,该函数就会被触发。
• onLongPress(MotionEvent e):长接触摸屏,超过一定时长,就会触发这个函数。
触发顺序:onDown→onShowPress→onLongPress
• onSingleTapUp(MotionEvent e): 从名字中也可 以看出,一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,才会触发这个函数。当然,如果除down以外还有其他操作,就不再算是单独操作了,也就不会触发这个函数了。
单击一下非常快的(不滑动)Touchup,触发顺序:onDown→onSingleTapUp→onSingleTapConfirmed
单击一下稍微慢一点的(不滑动) Touchup,触发顺序 :onDown→onShowPress→onSingleTapUp→onSingleTapConfirmed
• onFling(MotionEvent el, MotionEvent e2, float velocityX, float velocityY):滑屏,用户按下触摸屏、快速移动后松开,由一个MotionEvent ACTION_DOWN、多个ACTION_MOVE、一个ACTION_UP触发。
• onScroll(MotionEvent el, MotionEvent e2,float distanceX, float distanceY):在屏幕上拖动事件。无论是用手拖动View,还是以抛的动作滚动,都会多次触发这个函数,在ACTION_MOVE动作发生时就会触发该函数。
滑屏,即手指触动屏幕后,稍微滑动后立即松开,触发顺序:onDown→onScroll→onScroll→onScroll→...→onFling
拖动,触发顺序:onDown→onScroll→onScroll→onFling
可见,无论是滑屏还是拖动,影响的只是中间onScroll被触发的数量而己,最终都会触发onFling事件。
2.示例
要使用 GestureDetector,有四步要走 。
(1) 创建 OnGestureListener()监听函数。
GestureDetector.OnGestureListener listener = new GestureDetector.OnGestureListener() {
};
或构造类:
private class gestureListener implements GestureDetector.OnGestureListener {
}
(2) 创建GestureDetector实例mGestureDetector。
GestureDetector gestureDetector=new GestureDetector(GestureDetector.OnGestureListener listener};
GestureDetector gestureDetector=new GestureDetector(Context context, GestureDetector.OnGestureListener listener};
GestureDetector gestureDetector=new GestureDetec

本文深入探讨了Android中GestureDetector的手势识别原理与应用,包括onDown、onScroll、onFling等事件触发机制,以及如何通过SimpleOnGestureListener简化事件处理。同时,介绍了Window与WindowManager的工作机制,演示了如何利用它们实现悬浮窗效果。
最低0.47元/天 解锁文章
2099

被折叠的 条评论
为什么被折叠?



