对于RecyclerView,你可以使用addOnItemTouchListener方法来添加触摸监听器,为什么在onInterceptTouchEvent中不执行MotionEvent.ACTION_UP和在onTouchEvent中不执行拿不到MotionEvent.ACTION_DOWN


对于RecyclerView,你可以使用addOnItemTouchListener方法来添加触摸监听器,为什么在onInterceptTouchEvent中不执行MotionEvent.ACTION_UP和在onTouchEvent中不执行拿不到MotionEvent.ACTION_DOWN


上午好☀️☀️☀️️
本答案参考ChatGPT-3.5
在onInterceptTouchEvent中不执行MotionEvent.ACTION_UP和在onTouchEvent中不执行拿不到MotionEvent.ACTION_DOWN是两个不同的问题。
首先,让我们看看这两个事件的区别:
然后我们来看看在onInterceptTouchEvent中为什么这两个事件都不会被执行的原因:
ACTION_UP和ACTION_DOWN都是处理用户滑动事件的方法,但是在ACTION_UP方法中,我们可以通过判断滑动的方向(向上或向下)来决定是否执行ACTION_DOWN方法。但是,在ACTION_DOWN方法中,我们需要检测滑动的方向,但是我们还没有定义滑动的方向。因此,ACTION_DOWN方法不会被执行。
ACTION_DOWN方法没有对应的ACTION_UP方法,这使得ACTION_DOWN方法不能被执行。如果ACTION_DOWN方法需要被执行,那么ACTION_UP方法也应该被被执行。如果没有合适的ACTION_DOWN方法,那么ACTION_DOWN方法就不会被执行。
以下是如何解决这个问题的步骤:
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
// 判断滑动的方向
int direction = (e.getAction() == MotionEvent.ACTION_DOWN ? 1 : -1);
// 添加ACTION_DOWN方法
addOnTouchListener(new TouchEventListener() {
@Override
public void onTouchEvent(MotionEvent e) {
e.dispatchAction(direction);
}
});
return super.onInterceptTouchEvent(e);
}
@Override
public boolean onTouchEvent(MotionEvent e) {
// 添加ACTION_UP方法
addOnTouchListener(new TouchEventListener() {
@Override
public void onTouchEvent(MotionEvent e) {
e.dispatchAction(-direction);
}
});
return super.onTouchEvent(e);
}
请注意,以上代码只是一个示例,实际的实现可能会有所不同。