package com.my.view;
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 android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class FlingFrameLayout extends FrameLayout {
public FlingFrameLayout(@NonNull Context context) {
this(context,null);
}
public FlingFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public FlingFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mGestureDetector.onTouchEvent(event);
return true;
}
private GestureDetector mGestureDetector = new GestureDetector(getContext(), new GestureDetector.OnGestureListener() {
// 1. 用户轻触触摸屏
public boolean onDown(MotionEvent e) {
Log.i("MyGesture", "onDown");
return false;
}
// 2. 用户轻触触摸屏,尚未松开或拖动
// 与onDown()的区别:无松开 / 拖动
// 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress就会执行
public void onShowPress(MotionEvent e) {
Log.i("MyGesture", "onShowPress");
}
// 3. 用户长按触摸屏
public void onLongPress(MotionEvent e) {
Log.i("MyGesture", "onLongPress");
}
// 4. 用户轻击屏幕后抬起
public boolean onSingleTapUp(MotionEvent e) {
Log.i("MyGesture", "onSingleTapUp");
return true;
}
// 5. 用户按下触摸屏 & 拖动
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.i("MyGesture", "onScroll:");
return true;
}
// 6. 用户按下触摸屏、快速移动后松开
// 参数:
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.i("MyGesture", "onFling-velocityX=" + velocityX + ",velocityY=" + velocityY);
return true;
}
});
}
Android 简单快速实现 手势 快速滑动监听
最新推荐文章于 2025-04-13 17:19:40 发布