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:快速滑动,用力拽
onSingleTapConfirmed:单击事件被确认,300ms后没有第二次按下
onDoubleTap:双击事件
onDoubleTapEvent:双击后的输入事件,比如双击后拖拽
onContextClick:外接键盘鼠标右键
阅读量:436
点赞量:0
收藏量:0