美文网首页
滑动RecycleView改变标题Tab(或ToolBar)透明

滑动RecycleView改变标题Tab(或ToolBar)透明

作者: nodzhang | 来源:发表于2018-06-12 21:05 被阅读307次

    效果

    这里拿淘宝举例说明,效果相同


    滑动RecycleView改变标题透明度

    实现思路

    这里思路很简单,通过监听item距离顶部的位置,进行相应的透明度改变。但是,坑很深。
    监听滑动我们会首先想到通过RecyclerView.addOnScrollListener()实现,并且在onScrolled()方法中可以拿到滑动的距离dy。
    然而却没有那么简单,很多情况下dy的值是不准确的,而且当我们通过RecyclerView.ScrollTo()进行自动滑动时,也是捕获不到的。

    解决方案是什么么?通过观察者模式可以准确捕获到滑动
    mRecyclerView.getViewTreeObserver().addOnScrollChangedListener()

    然后通过这种方式捕获我们需要的item位置,通过该位置距离的判断改变Tab的透明度,具体代码实现如下:

        addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged () {
                //控制tab透明度
                if (layoutManager.findFirstVisibleItemPosition() == 0) {
                    mDistanceY = -mRecyclerView.getChildAt(0).getTop();
                    //完全变色的高度
                    int changeHeight = UIUtils.dip2px(35);
    
                    //当滑动的距离 <= toolbar高度的时候,改变Toolbar背景色的透明度,达到渐变的效果
                    if (mDistanceY <= changeHeight) {
                        float alpha = (float) mDistanceY / changeHeight;
                        indicator.setAlpha(alpha);
                        if (alpha < 0.01) {
                            indicator.setEnabled(false);
                        } else {
                            indicator.setEnabled(true);
                        }
                    } else {
                        //将标题栏的颜色设置为完全不透明状态
                        indicator.setAlpha(1);
                        indicator.setEnabled(true);
                    }
                } else {
                    if (indicator.getAlpha() != 1f) {
                        //将标题栏的颜色设置为完全不透明状态
                        indicator.setAlpha(1);
                        indicator.setEnabled(true);
                    }
                }
            }
        });
    

    这里实现方式很简单,只是通过addListener的方式滑动距离不准确以及捕获不到ScrollTo()和ScrollBy()的坑比较大,耽误了很久时间。

    相关文章

      网友评论

          本文标题:滑动RecycleView改变标题Tab(或ToolBar)透明

          本文链接:https://www.haomeiwen.com/subject/rvgreftx.html