0
我有一個九按鈕圖像的按鈕。我不想爲「按下」狀態提供另一個圖像(這是StateListDrawable
要求的)。我只是想讓它在被按下時變得更「黑暗」(就像iOS按鈕一樣)。我怎樣才能做到這一點?使用單個圖像按下時更改按鈕的顏色
我有一個九按鈕圖像的按鈕。我不想爲「按下」狀態提供另一個圖像(這是StateListDrawable
要求的)。我只是想讓它在被按下時變得更「黑暗」(就像iOS按鈕一樣)。我怎樣才能做到這一點?使用單個圖像按下時更改按鈕的顏色
使用這樣的事情:
public class MyStateDrawable extends LayerDrawable {
public MyStateDrawable(Drawable[] layers) {
super(layers);
}
@Override
protected boolean onStateChange(int[] states) {
for (int state : states) {
if (state == R.attr.state_activated || state == android.R.attr.state_pressed) {
super.setColorFilter(0x7f000000, Mode.SRC_ATOP);
return true;
} else if(state == -android.R.attr.state_activated || state == -android.R.attr.state_pressed){
super.setColorFilter(0x00000000, Mode.SRC_ATOP);
return true;
}else {
super.setColorFilter(null);
}
}
return super.onStateChange(states);
}
@Override
public boolean isStateful() {
return true;
}
}
然後
StateDrawable state = new MyStateDrawable(new Drawable[]{mDefaultDrawable});
view.setImageDrawable(state);
希望這將幫助你:)
謝謝您的回答。假設'view'是'ImageView'的一個實例,對吧?我不想使用'ImageView'而不是'Button',因爲我需要'setText'方法... – Nick
@Nick是否嘗試過使用setBackgroundDrawable而不是setImageDrawable? – AMerle
好吧,唯一不清楚的是:我該如何創建'mDefaultDrawable'?再次,我的按鈕的圖像是九個補丁,所以我需要創建一個'NinePatchDrawable',不知何故我猜? – Nick