Android开发之手势识别GestureDetector


Android对手势的支持非常到位,要识别手势,有以下步骤:

1,Activity继承OnGestureDetector

2,在类中声明GestureDetector gd;

3,在onCreate中实例化gd = new GestureDetector(this);

4,触摸委托给手势

 public boolean onTouchEvent(MotionEvent e){
     
  return gd.onTouchEvent(e);
     //把事件委托给gd
     
    }

但有时候我们不能把所有的事件都委托给手势,需要接收屏幕抬起事件:

  if(e.getAction() == MotionEvent.ACTION_UP){//负责监听屏幕抬起事件
    isGoOn = false;
    if(t1 != null){
     //t1.stop();
     t1.interrupt();
     t1 = null;
     if(vib != null){
      vib.cancel();//取消震动
     }
     
    }
   
  }

这里我们举了一个取消震动的事件

5,重写手势方法:

public boolean onDown(MotionEvent arg0)
 {
  //触摸按下
  Toast.makeText(this,"onDown" , 8000)
   .show();
  return false;
 }
 @Override
 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  float velocityY)
 {
  //在屏幕上"拖过"
  Toast.makeText(this , "onFling" , 8000)
   .show();
  return false;
 }
 @Override
 public void onLongPress(MotionEvent e)
 {
  //长按事件,我们使用手机的时候,通常会有弹出菜单的效果
  Toast.makeText(this ,"onLongPress" , 8000)
   .show(); 
 }
 @Override
 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
  float distanceY)
 {
  //"滚动"运动
  Toast.makeText(this ,"onScroll" , 8000)
   .show(); 
  return false;
 }
 @Override
 public void onShowPress(MotionEvent e)
 {
  //屏幕按下,没有移动和松开的方法
  Toast.makeText(this ,"onShowPress" , 8000)
   .show(); 
 }
 @Override
 public boolean onSingleTapUp(MotionEvent e)
 {
  //轻触屏幕
  Toast.makeText(this ,"onSingleTapUp" , 8000)
   .show();
  return false;
 }

实现这些方法,手势基本就差不多了,当然还有自定义手势,那是更深一个层次的,在此就不多说了。

相关内容