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