背景
最近公司的详情页改版,有一个需求设计同学觉得挺好,需要我们实现出来。
具体的需求大概就是,toolbar 上面的图标,需要根据滑动的距离去改变颜色~
当然是难不倒我们伟大的工程师(码农)的,所以讨论需求两小时,开发五分钟实现了设计的需求。
先看效果图~

请注意toolbar 上面的两个按钮
其实需求也就两点
1.灰色圆圈背景需要根据滑动距离变透明,其实改变它的alpha值就行了,这个容易。
2.就是白色图标需要渐变成黑色,这个其实也不难。
主要讲一下第二点的实现。
技术点
这个时候肯定需要去查阅下相关API文档了,发现原生确实就有 API 实现,相当的容易。
在官网中发现有这个 API,位于android.support.v4.graphics.drawable.DrawableCompat下:

中文意思差不多就是可以给指定的drawable着色。
有了这个 API 就好办了,我们去监听下面的控件滑动距离,根据距离去设置给图片着色。
核心代码
fun tintDrawable(drawable: Drawable, colors: ColorStateList): Drawable {
val wrappedDrawable = DrawableCompat.wrap(drawable)
DrawableCompat.setTintList(wrappedDrawable, colors)
return wrappedDrawable
}
在需要改变的地方调用这行代码即可:
imageView.setImageDrawable(tintDrawable(imageView.drawable, ColorStateList.valueOf(Color.argb(alpha, red, green, blue))))
这样就实现了这个需求了,效果如开头图。
题外话
由于有了这个功能,所以我就可以用setTintList实现一张矢量图适配所有颜色~
可以减少不少资源