開發iOS應用的時候,圖片很多時候只要一張,改變不同的色調就能變化出“正常、點擊、選中、不能編輯”等不同的效果。而Android以前是通過多張圖片(很多時候是一張基礎圖然后美工修改出幾種不同顏色對應不同效果,對比iOS的Tint效果簡直是low爆了有木有),以前在想,如果Android也能有這么方便的效果就好了。嗯嗯,今天就來介紹下Android的Drawable方法。
其實關鍵的類就是 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)));
我們來看看效果吧~~
效果圖