android - CoordinatorLayout中再嵌套CoordinatorLayout滑动冲突怎么解决?

查看:1136
本文介绍了android - CoordinatorLayout中再嵌套CoordinatorLayout滑动冲突怎么解决?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我的问题是在CoordinatorLayout中再嵌套一个CoordinatorLayout,两个都有自定义Behavior并都重写onStartNestedScroll的时候,只能监听到子CoordinatorLayout的滑动,也就是只执行了子CoordinatorLayout的自定义Behavior。

我的主布局是CoordinatorLayout,之中嵌套了一个ViewPager,以及toolbar和底部tab
在ViewPager的第一个Fragment中有一个RecyclerView和一个在此列表之上的一个LinerLayout
现在我利用自定义Behavior已经实现下滑动列表的时候,toolbar和底部tab都消失到屏幕外,上滑的时候回来
而我的第一个Fragment之中,那个LinerLayout也想利用Behavior来监听列表滑动并减小自己的高度,
因为CoordinatorLayout的自定义Behavior只能对直接子View有效,所以我想将Fragment的主布局设置为coordinatorlayout
现在问题来了,自定义Behavior的onStartNestedScroll函数返回true的时候,toolbar和底部tab就检测不到滑动了

目前尝试的方法有

将该LinerLayout包裹在AppBarLayout中,并设置RecyclerView的Behavior为appbar_scrolling_view_behavior
结果是toolbar和Tab都不会隐藏了

自己定义Behavior,重写onStartNestedScroll函数并返回true后,外部toolbar和Tab都不会隐藏了

主布局的Behavior,可以隐藏和显示tab

    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
        if (child.getVisibility() == View.VISIBLE && viewY == 0) {
            viewY = coordinatorLayout.getHeight() - child.getY();
        }
        return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL;//判断是否竖直滚动
    }

    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) {
        if (dy >=0&&!isAnimate&&child.getVisibility()==View.VISIBLE) {
            //隐藏的动画
        } else if (dy <0&&!isAnimate&&child.getVisibility()==View.GONE) {
            //显示动画
        }
    }

ViewPager中首个Fragment的布局自定义Behavior
测试的时候仅仅只将onStartNestedScroll函数返回true就发现外部的toolbar和tab都不会隐藏了

不知是不是因为CoordinatorLayout不能嵌套,还是我应该在子CoordinatorLayout在进行一次判断?该如何判断呢?
还是说要实现这种效果,就不能考虑两个CoordinatorLayout嵌套?

解决方案

你把Behavior写在你主布局的ViewPager中就行了

这篇关于android - CoordinatorLayout中再嵌套CoordinatorLayout滑动冲突怎么解决?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆