android - CoordinatorLayout中再嵌套CoordinatorLayout滑动冲突怎么解决?
迷茫
迷茫 2017-04-18 09:13:55
0
2
821

我的问题是在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嵌套?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(2)
巴扎黑

Hanya tulis Gelagat dalam ViewPager reka letak utama anda

左手右手慢动作

Satu CoordinatorLayout sudah memadai. Jika keperluan anda bersarang, anda belum meneroka CoordinatorLayout secara mendalam

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan