Android通過程式碼修改圖片顏色

weixin_33866037發表於2018-05-23

背景

最近公司的詳情頁改版,有一個需求設計同學覺得挺好,需要我們實現出來。
具體的需求大概就是,toolbar 上面的圖示,需要根據滑動的距離去改變顏色~

當然是難不倒我們偉大的工程師(碼農)的,所以討論需求兩小時,開發五分鐘實現了設計的需求。

先看效果圖~

1432234-94181658e1f7f22b.gif
請注意toolbar 上面的兩個按鈕

其實需求也就兩點

1.灰色圓圈背景需要根據滑動距離變透明,其實改變它的alpha值就行了,這個容易。
2.就是白色圖示需要漸變成黑色,這個其實也不難。

主要講一下第二點的實現。

技術點

這個時候肯定需要去查閱下相關API文件了,發現原生確實就有 API 實現,相當的容易。
官網中發現有這個 API,位於android.support.v4.graphics.drawable.DrawableCompat下:

1432234-141985e0c335ef89.png

中文意思差不多就是可以給指定的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實現一張向量圖適配所有顏色~
可以減少不少資源

相關文章