使用onTouchListener实现:
private float startX = 0; // 初始的 X 坐标
private int screenEdgeSize; // 判定为滑动侧边的水平范围
private int thresholdDistance = 200; // 滑动超过这个距离才算作完成滑动
private void init() {
screenEdgeSize = mContext.getResources().getDisplayMetrics().widthPixels / 100; // 屏幕宽度的1%为触发范围,可相应设置更大范围
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// 记录开始触摸的 X 坐标
startX = event.getX();
break;
case MotionEvent.ACTION_MOVE:
// 检测左滑和右滑,基于起始 X 坐标的位置
float deltaX = event.getX() - startX;
if ((startX < screenEdgeSize && deltaX >= thresholdDistance) || // 从左边缘向右滑
(startX > v.getWidth() - screenEdgeSize && -deltaX >= thresholdDistance)) { // 从右边缘向左滑
onBackPressed(); // 此处处理侧滑要执行的内容
return true; // 事件已被处理
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// 触摸结束或取消,进行清理操作
startX = 0;
break;
}
return false; // 触摸事件未被处理完毕,继续传递给其他的触摸事件监听器
}
});
}
重写dispatchKeyEvent实现
有时在外部会设置侧滑手势发送KeyEvent.KEYCODE_BACK键值,此时可以处理这一事件。
@Override
public boolean dispatchKeyEvent(@NonNull final KeyEvent event) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_BACK:
if (view != null) {
onBackPressed(); // 处理侧滑手势
}
return true;
default:
return super.dispatchKeyEvent(event);
}
}