Android学习之手势识别(GestureDetector)

    对于触摸屏的事件无非是按下、移动、抬起,如果是处理这几种简单的操作,使用OnTouch就可以完成,但是为了提高用户体验,识别复杂的手势,Android给我们提供的手势识别工具GestureDetector就可以帮上大忙了。

    要使用GestureDetector,需要实现OnGestureListener这个接口:

  //当用户按下时触发,由1个MotionEvent ACTION_DOWN触发 

  abstract boolean onDown(MotionEvent e);



  // 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发

  abstract boolean onSingleTapUp(MotionEvent e);  



   // 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发

    // 注意和onDown()的区别,强调的是没有松开或者拖动的状态

  abstract void onShowPress(MotionEvent e);



  // 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发

  abstract void onLongPress(MotionEvent e);



  // 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发

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



  // 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发

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

   下面就以一个简单的识别用户左右滑动为例: 

public class MainActivity extends Activity implements OnTouchListener,OnGestureListener{



    private GestureDetector gesture;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        

        TextView tv = (TextView) this.findViewById(R.id.textView1);

        tv.setOnTouchListener(this);

        tv.setLongClickable(true);

        gesture = new GestureDetector(this, this);

    }



    @Override

    public boolean onTouch(View v, MotionEvent event) {

        return gesture.onTouchEvent(event);

    }



    @Override

    public boolean onDown(MotionEvent e) {

        return false;

    }



    @Override

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

            float velocityY) {

    

        if(e1.getX() > e2.getX()){

            Toast.makeText(this, "用户手势往左边滑动", 3000).show();

        }else{

            Toast.makeText(this, "用户手势往右边滑动", 3000).show();

        }

        return false;

    }



    @Override

    public void onLongPress(MotionEvent e) {       

    }



    @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;

    }

}

 效果图:

Android学习之手势识别(GestureDetector)

注意:必须要设置你手势识别的View的LongClickable为true,否则有些手势无效。

你可能感兴趣的:(gesturedetector)