背景
最近公司的詳情頁改版,有一個需求設(shè)計同學覺得挺好荸频,需要我們實現(xiàn)出來。
具體的需求大概就是旭从,toolbar 上面的圖標,需要根據(jù)滑動的距離去改變顏色~
當然是難不倒我們偉大的工程師(碼農(nóng))的和悦,所以討論需求兩小時,開發(fā)五分鐘實現(xiàn)了設(shè)計的需求鸽素。
先看效果圖~
請注意toolbar 上面的兩個按鈕
其實需求也就兩點
1.灰色圓圈背景需要根據(jù)滑動距離變透明,其實改變它的alpha
值就行了馍忽,這個容易。
2.就是白色圖標需要漸變成黑色遭笋,這個其實也不難。
主要講一下第二點的實現(xiàn)坐梯。
技術(shù)點
這個時候肯定需要去查閱下相關(guān)API文檔了刹帕,發(fā)現(xiàn)原生確實就有 API 實現(xiàn),相當?shù)娜菀住?br>
在官網(wǎng)中發(fā)現(xiàn)有這個 API偷溺,位于android.support.v4.graphics.drawable.DrawableCompat
下:
中文意思差不多就是可以給指定的drawable
著色。
有了這個 API 就好辦了侦另,我們?nèi)ケO(jiān)聽下面的控件滑動距離,根據(jù)距離去設(shè)置給圖片著色褒傅。
核心代碼
fun tintDrawable(drawable: Drawable, colors: ColorStateList): Drawable {
val wrappedDrawable = DrawableCompat.wrap(drawable)
DrawableCompat.setTintList(wrappedDrawable, colors)
return wrappedDrawable
}
在需要改變的地方調(diào)用這行代碼即可:
imageView.setImageDrawable(tintDrawable(imageView.drawable, ColorStateList.valueOf(Color.argb(alpha, red, green, blue))))
這樣就實現(xiàn)了這個需求了,效果如開頭圖殿托。
題外話
由于有了這個功能,所以我就可以用setTintList實現(xiàn)一張矢量圖適配所有顏色~
可以減少不少資源