标题和状态栏滑动渐变(2)-Android
前言
在上一篇文章中我们成功的获取了recyclerview的滑动距离,这一篇我们将根据滑动距离对我们的状态栏和标题栏进行渐变处理.
首先我们要先定义一个固定的距离,是我们切换渐变状态的判断依据,比如这个距离是300,那么在300以内我们将对标题进行字体渐渐变黑,渐渐变白,状态栏图标也是如此.当滑动距离慢慢缩小,也就是上划时,标题的字体将会慢慢变白,背景渐渐透明.
首先我们先定义一个固定值,我这边设置为100dp
int S100 = ImageUtil.dp2px(this, 100);复制代码
ImageUtil.dp2px
是一个工具类,将dp转化为px,要屏幕适配的嘛,你们可以用自己项目中的转换类,这里我贴一下我们的工具类吧
public class ImageUtil { /** * @param context * @param dp * @return dip转pix */ public static int dp2px(Context context, float dp) { if (context != null && dp != 0) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); } return (int) dp; } } 复制代码
第二步,我们要判断recyclerview滑动的距离是否已经超过我们定义的固定距离,然后给状态栏切换图标颜色
if (test < S100) { ImmersionBar.with(this).statusBarDarkFont(false).init(); } else { ImmersionBar.with(this).statusBarDarkFont(true).init(); }复制代码
ImmersionBar是一个状态栏的三方库,咱们国家android魔改的系统非常多,什么小米,魅族,华为,oppo,vivo,他们机型有的可以使用Google官方提供的Api来进行适配状态栏有的就必须要到他们官方的开发者网站查找相应的设置方法,为了减少这种非必要的工作量,直接引用三方库是我们的最佳选择.
第三步,我们的滑动回调当滑动到最上面时会滑动回调返回0,我们也要加一个判断,来设置相应颜色
if (test < S100) { ImmersionBar.with(this).statusBarDarkFont(false).init(); if (test == 0) { mTv.setTextColor(ContextCompat.getColor(this, R.color.white)); mTv.setBackgroundColor(ContextCompat.getColor(this, R.color.trans)); } else { int alpha = test * 255 / S100; mTv.setTextColor(Color.argb(alpha, 0, 0, 0)); mTv.setBackgroundColor(Color.argb(alpha, 255, 255, 255)); } } else { ImmersionBar.with(this).statusBarDarkFont(true).init(); }复制代码
当我们滑动到最顶端时,将字体设置为白色,背景颜色设置为透明。
int alpha = test * 255 / S100;复制代码
test
是我们传递过来的参数,也就是滑动距离,S100
是上面一开始就说的滑动判断固定值.通过这么计算得出我们最终要设置的alpha
.
Color.argb()复制代码
这个就更简单了,就是为颜色设置alpha
,后面是RGB
颜色而已.来看看效果吧
好了,效果完成,拜拜┏(^0^)┛
作者:只是未遇见
链接:https://juejin.cn/post/7024829953233387550