1.http://blog.csdn.net/omg_2012/article/details/7881443

这篇相当好啊

2.http://blog.csdn.net/android_tutor/article/details/7193090

3.http://blog.csdn.net/heng615975867/article/details/8791937

4.http://www.dewen.org/q/2438/



ACTION_MASK在Android中是应用于多点触摸操作,字面上的意思大概是动作掩码的意思吧。
在onTouchEvent(MotionEvent event)中,使用switch (event.getAction())能够处理ACTION_DOWN和ACTION_UP事件;使用switch (event.getAction() & MotionEvent.ACTION_MASK)就能够处理处理多点触摸的ACTION_POINTER_DOWN和ACTION_POINTER_UP事件。
追问
能给我再详解下switch (event.getAction() & MotionEvent.ACTION_MASK)和
MotionEvent的一些事件
回答
ACTION_DOWN和ACTION_UP就是单点触摸屏幕,按下去和放开的操作;
ACTION_POINTER_DOWN和ACTION_POINTER_UP就是多点触摸屏幕,当有一仅仅手指按下去的时候,还有一仅仅手指按下和放开的动作捕捉;
ACTION_MOVE就是手指在屏幕上移动的操作;
经常使用的都是这几个吧。


publicvoidonPageScrollStateChanged(intstate){ 
滚动状态改变时调用。用于发现用户何时開始拖动、页面何时自己主动沉降到当前页(用户不拖动时)、或者何时全然停止/空暇。
*arg0:新的滚动状态。SCROLL_STATE_DRAGGING、SCROLL_STATE_SETTLING、SCROLL_STATE_IDLE



===================================================================================================

2014-2-27号补充:

http://developer.android.com/reference/android/view/MotionEvent.html
http://developer.android.com/training/gestures/multi.html(官方文档:关于多点触控的) 这里有一个系列的文档,和手势有关的还有其他的~很棒
http://my.eoe.cn/31127/thread http://www.eoeandroid.com/thread-259702-1-1.html

GestureDetector(OnGestureListener, OnDoubleTapListener, SimpleOnGestureListener) http://blog.csdn.net/xiezhenxiang/article/details/6659506


http://www.cnblogs.com/akira90/archive/2013/03/10/2952886.html


http://blog.csdn.net/xipiaoyouzi/article/details/7974898

小样例
http://www.2cto.com/kf/201209/156450.html

http://www.cnblogs.com/devinzhang/archive/2012/02/27/2369942.html

http://blog.csdn.net/cloudzfy1/article/details/6582707

http://www.icodelogic.com/?p=601


http://www.blogjava.net/TiGERTiAN/archive/2011/02/22/344869.html

http://www.linuxidc.com/Linux/2012-06/62567.htm


===================================================================================================


在刚開始学Android的时候,就认为Google的文档不咋样,在研究手势时,更加的感觉Google的文档写得实在是太差了。非常多常量,属性和方法,竟然连个描写叙述都没有。
没有描写叙述也就罢了,可是OnGestureListener里手势这么多,它也没有一个介绍说明,在没有进行不断才尝试之前,谁能搞懂onLongPress和onShowPress,
onScroll和onFling的关系与区别吗?Google真的须要在文档方面做一次大手术了。只是好在经过鄙人不断重复的尝试。从个人的角度为这几个手势动作做出了定义。

按下(onDown): 刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
抛掷(onFling): 手指在触摸屏上迅速移动,并松开的动作。
长按(onLongPress): 手指按在持续一段时间,而且没有松开。
滚动(onScroll): 手指在触摸屏上滑动。
按住(onShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。
抬起(onSingleTapUp):手指离开触摸屏的那一刹那。
  除了这些定义之外,鄙人也总结了一点算是经验的经验吧,在这里和大家分享一下。

不论什么手势动作都会先运行一次按下(onDown)动作。
长按(onLongPress)动作前一定会运行一次按住(onShowPress)动作。
按住(onShowPress)动作和按下(onDown)动作之后都会运行一次抬起(onSingleTapUp)动作。
长按(onLongPress)、滚动(onScroll)和抛掷(onFling)动作之后都不会运行抬起(onSingleTapUp)动作。

Android识别触摸屏手势使得用户体验大大提高。在View类中有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们能够处理一些简单的touch事件,可是这种方法并不能识别手势,假设须要处理一些复杂的手势,用这个接口就会非常麻烦(由于我们要自己依据用户触摸的轨迹去推断是什么手势)。好在Android为我们提供了GestureDetector类,通过它,我们能够轻松的进行手势识别。以下我做一个简要地介绍。
一.GestureDetector简单介绍
1.组成
GestureDetector类用来识别触摸屏的各种手势,它包括了两个接口和一个内部类:
接口:
OnGestureListener:用来监听手势事件(6种)。
OnDoubleTapListener:用来监听双击事件。
内部类:
SimpleOnGestureListener:用来监听全部的手势。实际上它实现了上述两个接口,只是方法体是空的,须要我们自己写。我们能够继承这个类,重写里面的方法进行手势处理。
2.构造
GestureDetector gestureDetector=new GestureDetector(GestureDetector.OnGestureListener listener);
GestureDetector gestureDetector=new GestureDetector(Context context,GestureDetector.OnGestureListener listener);
GestureDetector gestureDetector=new GestureDetector(Context context,GestureDetector.SimpleOnGestureListener listener);
3.方法
(1)onTouchEvent(MotionEvent ev) 分析捕捉到的触摸事件触发对应的回调函数
(2)setIsLongpressEnabled(boolean isLongpressEnabled) 设置“长按”是否可用
(3)setOnDoubleTapListener(GestureDetector.OnDoubleTapListener onDoubleTapListener) 设置双击监听器
4.使用
流程:
首先,系统捕捉屏幕的触摸事件(onTouchListener),这时还未涉及详细手势,仅仅是简单地捕捉到触摸。
接着,在onTouch()方法中调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给GestureDetector来处理
最后,还须要实现抽象方法。
实现:
(1)在Activity中创建GestureDetector实例gestureDetector。
(2)可依据须要选择:
重写OnGestureListener并通过构造函数传入gestureDetector
重写OnDoubleTapListener并通过GestureDetector.setOnDoubleTapListener方法传入gestureDetector
重写SimpleOnGestureListener并通过构造函数传入gestureDetector
(3)重写Activity的onTouchEvent方法,将全部的触摸事件交给gestureDetector来处理
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
二.onGestureListener
1.onGestureListener识别6种手势,各自是:
(1) onDown(MotionEvent e):down事件;
(2) onSingleTapUp(MotionEvent e):一次点击up事件;
(3) onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件;
(4) onLongPress(MotionEvent e):长按事件;
(5) onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件;
(6) onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。
这里我须要啰嗦在网上搜到的关于onFling和onScroll的一点差别。
onFling()是甩,这个甩的动作是在一个MotionEvent.ACTION_UP(手指抬起)发生时运行,而onScroll(),仅仅要手指移动就会运行。他不会运行MotionEvent.ACTION_UP。onFling通经常使用来实现翻页效果,而onScroll通经常使用来实现放大缩小和移动。
2.重写
OnGestureListener onGestureListener=new OnGestureListener(){
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
return false;
}
@Override
public boolean onLongPress(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {

}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
}
能够依据须要,在函数里加入详细的处理方法.之后通过构造函数传入GestureDetector就可以。
GestureDetector gestureDetector=new GestureDetector(this,onGestureListener);
二.OnDoubleTapListener
1.OnDoubleTapListener是用来检測鼠标双击事件的。须要实现的抽象方法有:
(1) onDoubleTap(MotionEvent e):双击事件。
(2) onDoubleTapEvent(MotionEvent e):双击间隔中还发生其它的动作。通知DoubleTap手势中的事件,包括down、up和move事件
(这里指的是在双击之间发生的事件,比如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知);
(3) onSingleTapConfirmed(MotionEvent e):单击事件。用来判定该次点击是SingleTap而不是DoubleTap,假设连续点击两次就是DoubleTap手势,
假设仅仅点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。
关于onSingleTapConfirmed和onSingleTapUp的一点差别: OnGestureListener有这种一个方法onSingleTapUp,和onSingleTapConfirmedeasy混淆。
二者的差别是:onSingleTapUp,仅仅要手抬起就会运行,而对于onSingleTapConfirmed来说,假设双击的话,则onSingleTapConfirmed不会运行。
2.重写
OnDoubleTapListener onDoubleTapListener new OnDoubleTapListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return false;
}
)
能够依据须要,在函数里加入详细的处理方法.,之后通过setOnDoubleTapListener传入GestureDetector就可以。
gestureDetector.setOnDoubleTapListener(onDoubleTapListener) ;
三.SimpleOnGestureListener
SimpleOnGestureListener是GestureDetector类的一个内部类,该类是static class,也就是说它实际上是一个外部类。能够在外部继承这个类,重写里面的手势处理方法。
1.SimpleOnGestureListener实际上实现了OnGestureListener 和OnDoubleTapListener,所以它能够完毕以上提到的全部手势识别(9种),如上介绍。
2.重写
public class simpleOnGestureListener extends SimpleOnGestureListener {

@Override
public boolean onDoubleTap(MotionEvent e) {
return super.onDoubleTap(e);
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return super.onDoubleTapEvent(e);
}
@Override
public boolean onDown(MotionEvent e) {
return super.onDown(e);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float x,
float y) {
return super.onFling(e1, e2, x, y);
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float x,
float y) {
return super.onScroll(e1, e2, x, y);
}
@Override
public void onShowPress(MotionEvent e) {
super.onShowPress(e);
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return super.onSingleTapConfirmed(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return super.onSingleTapUp(e);
}
}
能够依据须要,在函数里加入详细的处理方法,之后通过构造函数传入GestureDetector就可以。
GestureDetector gestureDetector=new GestureDetector(this,simpleOnGestureListener );
四.还有一种思路
要实现捕捉屏幕手势,除了在Activity中创建gestureDetector外,另一种思路:构建一个Overlay,这个Overlay实现OnGestureListener接口,使其维护自己的GestureDetector。
在主视图上加入这个Overlay,并传入对应的listener,就可以实现捕捉手势的功能。




这2个东西我一直弄不明确,一直蒙蒙的,今天有空,就又看了下,似乎有些懂了,写了測试代码測试了下,可是还是不太明确。參考了这篇文档:http://blog.csdn.net/android_tutor/article/details/7193090。
首先,这篇文章只针对于因为触摸(Touch)而触发的事件。

Android的事件:onClick, onScroll, onFling等等,都是由很多个Touch组成的。当中Touch的第一个状态肯定是ACTION_DOWN, 表示按下了屏幕。之后,touch将会有兴许事件,可能是:

ACTION_MOVE //表示为移动手势

ACTION_UP //表示为离开屏幕

ACTION_CANCEL //表示取消手势,不会由用户产生,而是由程序产生的

一个Action_DOWN, n个ACTION_MOVE, 1个ACTION_UP,就构成了Android中众多的事件。

在Android中,有一类控件是中还能够包括其它的子控件,这类控件是继承于ViewGroup类,比如:ListView, Gallery, GridView。

另一类控件是不能再包括子控件,比如:TextView。

本文的主要讨论对象就是ViewGroup类的控件嵌套时事件触发情况。

对于ViewGroup类的控件,有一个非常重要的方法,就是onInterceptTouchEvent(),用于处理事件并改变事件的传递方向,它的返回值是一个布尔值,决定了Touch事件是否要向它包括的子View继续传递,这种方法是从父View向子View传递。

而方法onTouchEvent(),用于接收事件并处理,它的返回值也是一个布尔值,决定了事件及兴许事件是否继续向上传递,这种方法是从子View向父View传递。

touch事件在 onInterceptTouchEvent()和onTouchEvent以及各个childView间的传递机制全然取决于onInterceptTouchEvent()和onTouchEvent()的返回值。返回值为true表示事件被正确接收和处理了,返回值为false表示事件没有被处理,将继续传递下去。

ACTION_DOWN事件会传到某个ViewGroup类的onInterceptTouchEvent,假设返回false,则DOWN事件继续向子ViewGroup类的onInterceptTouchEvent传递,假设子View不是ViewGroup类的控件,则传递给它的onTouchEvent。

假设onInterceptTouchEvent返回了true,则DOWN事件传递给它的onTouchEvent,不再继续传递,而且之后的兴许事件也都传递给它的onTouchEvent。

假设某View的onTouchEvent返回了false,则DOWN事件继续向其父ViewGroup类的onTouchEvent传递;假设返回了true,则兴许事件会直接传递给其onTouchEvent继续处理。(兴许事件仅仅会传递给对于必要事件ACTION_DOWN返回了true的onTouchEvent)

总结一下就是:onInterceptTouchEvent能够接受到全部的Touch事件,而onTouchEvent则不一定。


http://hao3100590.iteye.com/blog/1267294

http://blog.csdn.net/liutao5757124/article/details/6097125

http://wenku.baidu.com/view/bcd001c608a1284ac850430c.html

http://www.2cto.com/kf/201109/104205.html

MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
http://www.cnblogs.com/kingcent/archive/2011/03/08/1977064.html

http://glason.diandian.com/post/2011-12-19/12743121

http://www.cnblogs.com/kingcent/archive/2011/03/08/1977064.html

http://wenku.baidu.com/view/bcd001c608a1284ac850430c.html

http://blog.csdn.net/ddna/article/details/5473293

http://blog.csdn.net/ddna/article/details/5451722

http://blog.csdn.net/G_rrrr/article/details/4861189

官方文档翻译:
http://blog.csdn.net/iefreer/article/details/4586351



更多相关文章

  1. Android应用程序四种数据存取方法总结
  2. Android中的双击事件,GestureDetector无效的原因
  3. traceview的使用方法
  4. android Bimtap 各种图片处理方法、图片特效
  5. 触摸事件的机制
  6. android手势
  7. android 9.0获取mac地址的方法
  8. Android实现音量调节的方法
  9. android常用intent的方法

随机推荐

  1. android 中RGB颜色值得设定
  2. RaidoButton单选框
  3. Android 代码修改按钮上的图片
  4. [Android进阶]Binder学习(初始篇)
  5. Ubuntu 下不能识别android设备的解决方法
  6. android 经典文章收集
  7. android中的AdapterView阅读
  8. Android关机方法
  9. 重点核心☆☆☆☆☆按钮点击事件的四种类
  10. Android发送数据到web服务器4种方式