美文网首页
调用View的getBackground()获取Drawable

调用View的getBackground()获取Drawable

作者: zgq简书 | 来源:发表于2020-09-14 11:57 被阅读0次

    大多数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,这次心血来潮试一次,结果出现.......。总算是解决了

    相关文章

      网友评论

          本文标题:调用View的getBackground()获取Drawable

          本文链接:https://www.haomeiwen.com/subject/dhzaektx.html