大多数APP应该都有滑动列表时,顶部的标题的背景颜色,随着滑动距离来改变透明度,如下
1、改变背景颜色透明度
mLayoutTitle.getBackground().setAlpha(alpha); //(alpha:0 - 255)
2、获取alpha的值(0 - 255)
先设定一个滑动的最大高度maxHeight,通过recyclrview、NestedScrollView等可以获取到当前滑动的高度currHeight,下面就是计算alpha的具体值
float scale = (float)currHeight / maxHeight; // 不能使用int类型
int alpha = (int) (255 * scale);// 最终设置给setAlpha的透明度
这个时候美滋滋的调用mLayoutTitle.getBackground().setAlpha(alpha); 运行代码,滑动测试,没毛病,可以的,完美~~~哎,一不小心进入了一个页面,这个页面使用的颜色和标题的背景色一样,发现也变成透明色了,这尼玛什么鬼
这个时候找google了,大概是这样说的:默认情况下,所有的从同一资源加载来的drawable实例都共享一个共用的状态,如果你更改一个实例的状态,其他所有的实例都会收到相同的通知,并随之改变。好吧,你赢了!!!
解决方案1:换一种实现方式
参数1:透明度、参数2、3、4,是要显示的色值
mLayoutTitle.setBackgroundColor(Color.argb(alpha, 255, 255, 255));
解决方案2:我就要用那种方式实现,咋整!!!一顿操作还是有方法的mutate(),具体实现如下
mLayoutTitle.getBackground().mutate().setAlpha(alpha);
之前都用的方案1,没用过方案2,这次心血来潮试一次,结果出现.......。总算是解决了
网友评论