開發(fā)iOS應(yīng)用的時候,圖片很多時候只要一張,改變不同的色調(diào)就能變化出“正常甚脉、點擊、選中铆农、不能編輯”等不同的效果牺氨。而Android以前是通過多張圖片(很多時候是一張基礎(chǔ)圖然后美工修改出幾種不同顏色對應(yīng)不同效果狡耻,對比iOS的Tint效果簡直是low爆了有木有),以前在想猴凹,如果Android也能有這么方便的效果就好了夷狰。嗯嗯,今天就來介紹下Android的Drawable方法郊霎。
其實關(guān)鍵的類就是 Android Support v4
的包中提供了 DrawableCompat
沼头。
我們可以封裝一個靜態(tài)函數(shù)方便使用,如下:
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>
好了,網(wǎng)上找一個圖片取名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
來設(shè)置不同狀態(tài)圖片的骡苞,我們需要點擊來改變圖片顏色怎么辦呢垂蜗?
不用擔心,同樣支持selector
來改變顏色解幽。接下來我們要創(chuàng)建這個控制狀態(tài)顏色的selector
贴见。
在color
目錄下new
一個 xml
取名為“selector_imagebutton_batman.xml”作為我們的控制顏色selector
,點擊變?yōu)榉奂t色躲株,正常狀態(tài)為藍色片部。
<?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函數(shù)的參數(shù)改為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)));
我們來看看效果吧~~