GestureDetector 的基本使用

9,572 阅读3分钟
原文链接: blog.csdn.net

Android对于手势的检测提供了一系列的API,其中包括对于手势检测的监听器、对于手势识别的API等等。
本篇主要介绍手势检测监听器GestureDetector类的基本使用。

Android为手势检测提供了一个GestureDetector类,GestureDetector实例代表了一个手势检测器。
GestureDetector这个类对外提供了两个接口和一个外部类,其中包括:
接口:OnGestureListener,OnDoubleTapListener
内部类:SimpleOnGestureListener

对于OnGestureListener基本使用:
首先在MainActivity中定义我们的手势监听器,并让当前的Activity来实现监听接口:

    //定义手势监听器
    GestureDetector gestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gestureDetector=new GestureDetector(this,this);
    }

实现接口中的回调方法:

    //当手指按下的时候触发下面的方法
    @Override
    public boolean onDown(MotionEvent e) {
        System.out.println("onDown");
        return false;
    }
    //当用户手指在屏幕上按下,而且还未移动和松开的时候触发这个方法
    @Override
    public void onShowPress(MotionEvent e) {
        System.out.println("onShowPress");
    }
    //当手指在屏幕上轻轻点击的时候触发下面的方法
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        System.out.println("onSingleTapUp");
        return false;
    }
    //当手指在屏幕上滚动的时候触发这个方法
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        System.out.println("onScroll");
        return false;
    }
    //当用户手指在屏幕上长按的时候触发下面的方法
    @Override
    public void onLongPress(MotionEvent e) {
        System.out.println("onLongPress");
    }
    //当用户的手指在触摸屏上拖过的时候触发下面的方法,velocityX代表横向上的速度,velocityY代表纵向上的速度
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        System.out.println("onFling");
        return false;
    }

最后将Activity中的OnTouchEvent事件交给手势监听器处理:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }

对于OnDoubleTapListener基本使用:
同样的让MainActivity也实现OnDoubleTapListener接口。

public class MainActivity extends Activity implements OnGestureListener,OnDoubleTapListener

实现对应的抽象方法:

    //当手机屏幕接收到单击事件,也就是当手指在点击了手机屏幕之后在一定时间内没有接受到第二次的单击事件时触发下面的方法
    //当如果手机接收到的是双击事件,在每次双击的第一次的点击的时候会唯一的触发下面的方法
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        System.out.println("onSingleTapConfirmed");
        return false;
    }
    //当系统接受到双击事件的时候会在两次点击之间触发一次下面的方法
    @Override
    public boolean onDoubleTap(MotionEvent e) {
        System.out.println("onDoubleTap");
        return false;
    }
    //当系统接收到双击事件的时候,在每一次的结束触发下面的方法一次
    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        System.out.println("onDoubleTapEvent");
        return false;
    }

同样要将具体的触摸事件交由GestureDetector检测器来处理。

下面简要介绍一下SimpleOnGestureListener,此类用法非常简单。首先我们可以看到对于实现两个接口来实现事件的监听回调的方式来处理用户的手势,我们都需要强制重写多个抽象方法,然而我们可能不需要这么多。SimpleOnGestureListener实现了两个接口,但是对于所有的抽象方法的实现都是空的,当我们需要实现特定的几个方法的时候我们就可以继承此类而不是实现接口了。