Android随着scrollView或者recyclerView滑动状态栏颜色渐变效果

不管是scrollView还是recyclerView都需要设置滑动监听

scroll.setScrollViewListener(new ScrollView.OnScrollViewListener() {
            @Override
            public void onScollChanged(int l, int t, int oldl, int oldt) {
               //在这里做颜色渐变的操作
            }
        });
 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                //在这里做颜色渐变的操作
            }
        });

在我做项目中总结了两种方式:
方式一:

    private int tempY = 0;
    private float duration = 150.0f;//在0-150之间去改变头部的透明度
    private ArgbEvaluator evaluator = new ArgbEvaluator();
    private RecyclerView.OnScrollListener listener = new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            tempY += dy;

            // 滚动的总距离相对0-150之间有一个百分比,头部的透明度也是从初始值变动到不透明,通过距离的百分比,得到透明度对应的值
            // 如果小于0那么透明度为初始值,如果大于150为不透明状态

            int bgColor = 0X553190E8;
            if (tempY < 0) {
                bgColor = 0X553190E8;
            } else if (tempY > 150) {
                bgColor = 0XFF3190E8;
            } else {
                bgColor = (int) evaluator.evaluate(tempY / duration, 0X553190E8, 0XFF3190E8);
            }

            title_layout.setBackgroundColor(bgColor);

        }
    };

方式二:

    final int height = DeviceUtil.dp_to_px(this, 150);
        scroll.setScrollViewListener(new ObservableScrollView.OnScrollViewListener() {
            @Override
            public void onScollChanged(int l, int t, int oldl, int oldt) {
                if (t > height) {
                    t = height;
                }
                 title_layout.setBackgroundColor(Color.argb(Math.round(t * 256 * 0.7f / height), 0, 0, 0));

            }
        });

有什么错误的还望指正,共勉!

你可能感兴趣的:(android)