Android自定义View - GestureDetector-灵析社区

chole


GestureDetector

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

import androidx.annotation.Nullable;

public class MyView extends View implements GestureDetector.OnGestureListener {

    private GestureDetector mDetector;

    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        mDetector = new GestureDetector(getContext(), this);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mDetector.onTouchEvent(event);
        return super.onTouchEvent(event);

    }

    @Override
    public boolean onDown(MotionEvent e) {
        Log.d("MyView", "onDown");
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        Log.d("MyView", "onShowPress");
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        Log.d("MyView", "onSingleTapUp");
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        Log.d("MyView", "onScroll");
        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        Log.d("MyView", "onLongPress");
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        Log.d("MyView", "onFling");
        return false;
    }
}

使用GestureDetector可以监听很多类型的手势,比如长按控件,会打印以下结果。

下面解释一下这几个回调是什么时候回调的。
onDown:手指按下
onShowPress:按下后停留,没有松开
onSingleTapUp:点击手指松开,如果没有回调onScroll和onLongPress的话,就会回调这个
onScroll:滑动
onLongPress:长按控件
onFling:快速滑动,用力拽

OnDoubleTapListener

onSingleTapConfirmed:单击事件被确认,300ms后没有第二次按下
onDoubleTap:双击事件
onDoubleTapEvent:双击后的输入事件,比如双击后拖拽

OnContextClickListener

onContextClick:外接键盘鼠标右键

阅读量:436

点赞量:0

收藏量:0