Android 更改純色背景圖片顏色,可實現一張背景圓形圖片展示不同顏色
項目中可能會遇到比如多個純色圓形背景列表或者說純色圓形頭像背景,一般讓UI設計師設計多張背景圖;但是有更好的方法只需一張圖就可以搞定。
當然完全也不用麻煩我們的UI設計師啦,直接畫一個圓形背景圖不就行了。
用shape畫圓形圖
View設置該背景
代碼裏設置setColorFilter即可
首先畫個圓形圖,大家都比較熟悉,再次記錄下(畫一個白色圓形圖):
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/white" />
<size
android:width="50dp"
android:height="50dp" />
</shape>
然後設置該背景:
<ImageView
android:id="@+id/mColor"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@android:color/transparent"
android:src="@drawable/dot_white" />
最後在需要更改顏色設置顏色:
mColor.setColorFilter(0xFFFF0000);//設置紅色顏色
這就完成了,是不是很方便。主要還是setColorFilte,當然該屬性支持xml裏設置的。
setColorFilter(ColorFilter filter)是什麼呢?
設置顏色過濾,這個方法需要我們傳入一個ColorFilter參數同樣也會返回一個ColorFilter實例。我們在setColorFilter(ColorFilter filter)的時候可以直接傳入ColorMatrixColorFilter、LightingColorFilter或PorterDuffColorFilter的子類對象作爲參數。
我們採用默認的直接顏色,我們進入源代碼可以發現默認是PorterDuff.Mode.SRC_ATOP
/**
* Set a tinting option for the image. Assumes
* {@link PorterDuff.Mode#SRC_ATOP} blending mode.
*
* @param color Color tint to apply.
* @attr ref android.R.styleable#ImageView_tint
*/
@RemotableViewMethod
public final void setColorFilter(int color) {
setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
}
至於屬性參數設置爲PorterDuff.Mode。
至於該參數有什麼不同呢,網上也有很多,就不累贅了,找個大神的實驗可以理解下點擊查看
注意
- 我們畫的圓形的圖片不能是透明的,透明就沒法進行填充過濾啦。
有的如果不生效,可以嘗試添加下設置背景爲透明
android:background="@android:color/transparent"
但是我進行了測試添加不添加,都是生效的。