自己写类似coordinatorlayout的实现效果,解决一些coordinatorlayout不能满足的要求

我的文章是基于这位大哥的博客基础上修改的,他的博客写的很好。为了表示对他的感激和敬佩之情,我的把原地址传达给大家:

http://blog.csdn.net/oushangfeng123/article/details/47326511


我遇到的问题正如上面链接文章里说的第3条一样,我需要点击某个操作(不是滑动)让隐藏的AppBarLayout显示出来,折腾了很久发现使用官方的CoordinatorLayout

很难做到这一点(目前本人是没有研究出来,自定义Behavior也是需要某个控件移动才能让AppbarLayout跟着移动,而我这个场景是没有移动事件的)。


大家可以先下一下上面文章里最后给的代码,运行看看,效果已经很不错了。就是有一点还没有做到位,就是评论里人们说的 :


逻辑一样,可是,就是滚动的时候,不会隐藏。


我针对他的例子做了一点修改,修改如下


HomeSimpleFragment:

    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                    element.setAppBarOffset(dy);
                    EventBus.getDefault().post(element, "scroollTabLayout");
            }
        });

MainActivity:

    @Subscriber(tag = "scroollTabLayout")
    private void scroollTabLayout(EventBusElement element) {
        if(element.getAppBarOffset()>0){
            if((mAppBarLayout.getScrollY()+element.getAppBarOffset())<=mAppBarLayout.getHeight()){
                mAppBarLayout.scrollBy(0, element.getAppBarOffset());
            }else{
                mAppBarLayout.scrollBy(0,mTabLayoutHeight-mAppBarLayout.getScrollY());
            }
        }else if(element.getAppBarOffset()<0){
            if((mAppBarLayout.getScrollY()+element.getAppBarOffset())>0){
                mAppBarLayout.scrollBy(0, element.getAppBarOffset());
            }
            else{
                mAppBarLayout.scrollBy(0,-mAppBarLayout.getScrollY());
            }
        }
        Log.i("scrollYoffset", element.getAppBarOffset() + "");
        Log.i("scrollY", mAppBarLayout.getScrollY() + "");
        Log.i("scrollYheight", mAppBarLayout.getHeight() + "");
    }


运行效果图如下:


源码下载地址:https://github.com/tomyZhou/CustomedCoordinatorLayout

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值