Drawable的Tint變色(讓Android也能有iOS那么方便的圖片色調轉換)

開發iOS應用的時候,圖片很多時候只要一張,改變不同的色調就能變化出“正常、點擊、選中、不能編輯”等不同的效果。而Android以前是通過多張圖片(很多時候是一張基礎圖然后美工修改出幾種不同顏色對應不同效果,對比iOSTint效果簡直是low爆了有木有),以前在想,如果Android也能有這么方便的效果就好了。嗯嗯,今天就來介紹下AndroidDrawable方法。

其實關鍵的類就是 Android Support v4 的包中提供了 DrawableCompat

我們可以封裝一個靜態函數方便使用,如下:

public static Drawable tintDrawable(Drawable drawable, ColorStateList colors) {
    final Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTintList(wrappedDrawable, colors);
    return wrappedDrawable;
}

新建一個Activity,并在layout加入ImageButton作為演示效果的控件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageButton
        android:id="@+id/ivButton"
        android:src="@drawable/batman"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

好了,網上找一個圖片取名batman,就是上面ImageButton的src

原圖

接下來我們在Activity代碼中把src由黑色改為白色。

ImageButton ivButton = (ImageButton) findViewById(R.id.ivButton);
Drawable src = ivButton.getDrawable();
ivButton.setImageDrawable(tintDrawable(src,ColorStateList.valueOf(Color.WHITE)));

運行一下,ImageButton的圖片batman就神奇的變成白色了~

白色

那么我們平時是通過selector來設置不同狀態圖片的,我們需要點擊來改變圖片顏色怎么辦呢?
不用擔心,同樣支持selector來改變顏色。接下來我們要創建這個控制狀態顏色的selector
color目錄下new 一個 xml取名為“selector_imagebutton_batman.xml”作為我們的控制顏色selector,點擊變為粉紅色,正常狀態為藍色。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#FF4081" android:state_pressed="true" />
    <item android:color="#3F51B5" />
</selector>

然后我們把剛剛傳給tintDrawable函數的參數改為selector即可

ivButton = (ImageButton) findViewById(R.id.ivButton);
Drawable src = ivButton.getDrawable();
//        ivButton.setImageDrawable(tintDrawable(src,ColorStateList.valueOf(Color.WHITE)));
ivButton.setImageDrawable(tintDrawable(src,getResources().getColorStateList(R.color.selector_imagebutton_batman)));

我們來看看效果吧~~

效果圖
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容