Nestscrollview的滑动事件被其他控件(如:ViewPager)拦截了
时间: 2024-05-27 13:12:03 浏览: 14
如果Nestscrollview的滑动事件被其他控件(如ViewPager)拦截了,可以考虑以下两种方法:
1. 禁止其他控件拦截Nestscrollview的滑动事件
可以在Nestscrollview的onInterceptTouchEvent()方法中,判断是否需要拦截事件,如果需要拦截,就返回true,否则返回false。例如,可以在Nestscrollview中添加如下代码:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
if (action == MotionEvent.ACTION_DOWN) {
// 记录触摸点坐标,用于后续判断滑动方向
mLastMotionY = ev.getY();
} else if (action == MotionEvent.ACTION_MOVE) {
// 判断滑动方向,如果是上下滑动,则拦截事件,否则不拦截
float deltaY = ev.getY() - mLastMotionY;
if (Math.abs(deltaY) > mTouchSlop) {
if (deltaY < 0 && canChildScrollDown()) {
// 向上滑动,但子控件可以继续向下滑动,不拦截事件
} else if (deltaY > 0 && canChildScrollUp()) {
// 向下滑动,但子控件可以继续向上滑动,不拦截事件
} else {
// 上下滑动,且子控件不能继续滑动,拦截事件
return true;
}
}
}
return super.onInterceptTouchEvent(ev);
}
其中,canChildScrollUp()和canChildScrollDown()是判断子控件是否可以向上或向下滑动的方法,可以根据具体情况实现。
2. 在其他控件中处理Nestscrollview的滑动事件
如果其他控件(如ViewPager)必须要拦截Nestscrollview的滑动事件,可以在其他控件中重写onInterceptTouchEvent()方法,判断是否需要处理Nestscrollview的滑动事件。例如,在ViewPager中添加如下代码:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
if (action == MotionEvent.ACTION_DOWN) {
// 记录触摸点坐标,用于后续判断滑动方向
mLastMotionY = ev.getY();
} else if (action == MotionEvent.ACTION_MOVE) {
// 判断滑动方向,如果是上下滑动,则处理Nestscrollview的滑动事件,否则不处理
float deltaY = ev.getY() - mLastMotionY;
if (Math.abs(deltaY) > mTouchSlop) {
if (deltaY < 0 && canScrollDown()) {
// 向上滑动,且ViewPager可以继续向下滑动,不处理Nestscrollview的滑动事件
} else if (deltaY > 0 && canScrollUp()) {
// 向下滑动,且ViewPager可以继续向上滑动,不处理Nestscrollview的滑动事件
} else {
// 上下滑动,且ViewPager不能继续滑动,处理Nestscrollview的滑动事件
mNestedScrollingChildHelper.startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
}
}
}
return super.onInterceptTouchEvent(ev);
}
其中,canScrollUp()和canScrollDown()是判断ViewPager是否可以向上或向下滑动的方法,可以根据具体情况实现。在处理Nestscrollview的滑动事件时,需要使用NestedScrollingChildHelper来实现。具体可以参考官方文档:https://developer.android.com/reference/android/support/v4/view/NestedScrollingChildHelper
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)