您的位置:首页 > 移动开发 > Android开发

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

2017-06-30 15:49 639 查看
不管是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));

}
});


有什么错误的还望指正,共勉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐