将触摸事件从 NestedScrollView 传递给父视图

Ali*_* MH 6 android touch-event android-viewpager android-nestedscrollview

我在 NestedScrollView 宽度下方有一个 ViewPager 一些顶部填充,以及 clipToPadding(false) 和透明背景(如图像)。

我的 ViewPager 无法获得触摸事件并且不起作用。

我怎么解决这个问题?

(我不能改变我的结构,也不能将 ViewPager 移动到 NestedScrollView 的上方或将 TopMargin 设置为 NestedScrollView)

ViewPager 在一个透明的 NestedScrollView 下面

ViewPager 在一个透明的 NestedScrollView 下面

嵌套滚动视图

nestedScrollView = new NestedScrollView(getContext());
nestedScrollView.setFillViewport(true);
nestedScrollView.setLayoutParams(scrollParams);
nestedScrollView.setClipToPadding(false);
Run Code Online (Sandbox Code Playgroud)

解决方案:

通过覆盖 NestedScrollView 和 Override onTouchEvent 解决了这个问题。(感谢@petrumo

public class MyNestedScrollView extends NestedScrollView {
    private boolean topZone = false;

    public MyNestedScrollView(Context context) {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if(ev.getAction() == MotionEvent.ACTION_DOWN ){
            topZone = (getPaddingTop() - getScrollY() >  ev.getY());
        }

        if(topZone){
            if(ev.getAction() == MotionEvent.ACTION_UP){
                topZone = false;
            }
            return false;
        }
        return super.onTouchEvent(ev);
    }

}
Run Code Online (Sandbox Code Playgroud)

pet*_*umo 1

对于这种情况有一个解决方法,您可以覆盖nestedscrollview中的onInterceptTouchEvent和onTouchEvent。有帖子解释了如何做到这一点,https://developer.android.com/training/gestures/viewgroup.htmlhttp://neevek.net/posts/2013/10/13/implementing-onInterceptTouchEvent-and-onTouchEvent -for-ViewGroup.html。当您拦截事件时,根据位置和自定义逻辑,您将决定不使用触摸将其留给视图分页器或让默认的滚动视图逻辑处理它。

我不赞成这种解决方案,但正如您所解释的,您需要让 NestedScrollview 覆盖 viewPager,除非您可以重新考虑限制