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

来源:互联网 发布:僧格林沁 知乎 编辑:程序博客网 时间:2024/05/16 12:29

不管是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));            }        });

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

阅读全文
0 1
原创粉丝点击