一、介绍

1、有关Android手势的类:

(1)android.view.GestureDetector

 (2)  android.view.GestureDetector.SimpleOnGestureListener

(3)android.widget.Gallery. OnGestureListener


二、事件介绍

(1)SimpleOnGestureListener、GestureDetector中的事件(event)包含如下,OnGestureListener中的事件在代码中有注释,SimpleOnGestureListener没有提供onUp(), 需要在View的onTouchEvent的case MotionEvent.ACTION_UP:来填充逻辑。


  /* 双击的第二下Touch down时触发*/

 boolean onDoubleTap(MotionEvent e)

 

 /*双击的第二下Touch down和up都会触发,可用e.getAction()区分。*/ 

    boolean onDoubleTapEvent(MotionEvent e)

 

/*Touch down时触发*/

  boolean onDown(MotionEvent e)

  

 /*Touch了滑动一点距离后,up时触发。*/

  boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

  

 /*Touch了不移动一直Touch down时触发*/

  void onLongPress(MotionEvent e)


 /*Touch了滑动时触发。*/

  boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)

  

 /*Touch了还没有滑动时触发*/

  void onShowPress(MotionEvent e)

  (与onDown,onLongPress比较

  onDown只要Touch down一定立刻触发。

  而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。

  所以Touchdown后一直不滑动,onDown->onShowPress->onLongPress这个顺序触发。

  )

 

/*这两个函数都是在touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。*/

  boolean onSingleTapConfirmed(MotionEvent e)

  boolean onSingleTapUp(MotionEvent e)

  

 

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

  onDown->onSingleTapUp->onSingleTapConfirmed

 

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

  onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

 

  2)在view的新建一个GestureDetector的对象。

 

  构造函数里 gestureDetector = new GestureDetector(new HahaGestureDetectorListener());

 

  然后在View的onTouchEvent里以下这样用,就可以在刚才1)弄的事件里写自己的代码了。

 

  @Override

  public boolean onTouchEvent(MotionEvent event) {

  gestureDetector.onTouchEvent(event);

  }



一个使用android.view.GestureDetector.OnGestureListener上下左右滑动的例子:

public class CbMainActivity extends Activity implements  android.view.GestureDetector.OnGestureListener{//定义手势检测器实例GestureDetector detector;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.cb_main);        //创建手势检测器        detector = new GestureDetector(this,this);     }    //将该activity上的触碰事件交给GestureDetector处理    public boolean onTouchEvent(MotionEvent me){    return detector.onTouchEvent(me);    }    @Overridepublic boolean onDown(MotionEvent arg0) {return false;}/** * 滑屏监测 *  */@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {float minMove = 120;         //最小滑动距离float minVelocity = 0;      //最小滑动速度float beginX = e1.getX();     float endX = e2.getX();float beginY = e1.getY();     float endY = e2.getY();if(beginX-endX>minMove&&Math.abs(velocityX)>minVelocity){   //左滑Toast.makeText(this,velocityX+"左滑",Toast.LENGTH_SHORT).show();}else if(endX-beginX>minMove&&Math.abs(velocityX)>minVelocity){   //右滑Toast.makeText(this,velocityX+"右滑",Toast.LENGTH_SHORT).show();}else if(beginY-endY>minMove&&Math.abs(velocityY)>minVelocity){   //上滑Toast.makeText(this,velocityX+"上滑",Toast.LENGTH_SHORT).show();}else if(endY-beginY>minMove&&Math.abs(velocityY)>minVelocity){   //下滑Toast.makeText(this,velocityX+"下滑",Toast.LENGTH_SHORT).show();}return false;}     /**      *  Touch了还没有滑动时触发     */@Overridepublic void onShowPress(MotionEvent arg0) {// TODO Auto-generated method stub}//touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。/*    点击一下非常快的(不滑动)Touchup:  onDown->onSingleTapUp->onSingleTapConfirmed  点击一下稍微慢点的(不滑动)Touchup:  onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed*/@Overridepublic boolean onSingleTapUp(MotionEvent arg0) {// TODO Auto-generated method stubreturn false;}/*Touch了不移动一直Touch down时触发,即:长按*/@Overridepublic void onLongPress(MotionEvent arg0) {// TODO Auto-generated method stub}@Override/*Touch了滑动时触发。*/  public boolean onScroll(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {return false;}}


笔记:SimpleOnGestureListener可以实现双击,而android.view.GestureDetector.OnGestureListener没有此事件。

详细的Touch介绍可参考一篇博文:http://blog.csdn.net/xiezhenxiang/article/details/6659506

更多相关文章

  1. Android:解决列表滚动时背景色变黑的方法
  2. android input 事件传递主要流程
  3. Android--ListView滑动时出现黑屏解决方法(整合)
  4. Android(安卓)防止点击事件连按,isFastClick()
  5. Androi:ViewPager
  6. Android日历行程
  7. android相关文章收藏
  8. android 处理鼠标滚轮事件
  9. Android的Location功能代码

随机推荐

  1. windows10下mysql 8.0 下载与安装配置图
  2. MySQL PHP语法浅析
  3. Win10下mysql 8.0.15 安装配置方法图文教
  4. window下mysql 8.0.15 安装配置方法图文
  5. mysql 8.0.15 winx64解压版安装配置方法
  6. mysql 8.0.14 安装配置方法图文教程
  7. windows下mysql 8.0.13 解压版安装图文教
  8. mysql8.0.14.zip安装时自动创建data文件
  9. Ubuntu18.04安装mysql5.7.23的教程
  10. mysql 8.0.14 安装配置方法图文教程(通用