Как установить Альфа-значение для drawable в StateListDrawable?
Я хочу изменить Альфа-значение рисоваемого объекта, когда он нажат. Поэтому я создаю два чертежа и помещаю их в StateListDrawable и устанавливаю Альфа-значение для нажатого состояния. Но это просто не работает.
StateListDrawable content = new StateListDrawable();
Drawable contentSelected = this.getResources().getDrawable(
R.drawable.content_background);
contentSelected.mutate().setAlpha(100);
Drawable contentNormal = this.getResources().getDrawable(R.drawable.content_background);
content.addState(new int[] { android.R.attr.state_pressed }, contentSelected);
content.addState(new int[] { android.R.attr.state_enabled }, contentNormal);
ImageButton button = (ImageButton) view.findViewById(R.id.content_thumbnail);
button.setImageDrawable(content);
Обновление :
Мое окончательное решение-создать подкласс BitmapDrawable, как это,
и измените значение альфа в методе onStateChange()
.
public AlphaAnimatedDrawable(Resources res, Bitmap bitmap) {
super(res, bitmap);
this.setState(new int[] { android.R.attr.state_pressed, android.R.attr.state_selected,
android.R.attr.state_enabled });
}
private static final int PRESSED_ALPHA = 180;
private static final int REGULAR_ALPHA = 255;
@Override
protected boolean onStateChange(int[] states) {
for (int state : states) {
if (state == android.R.attr.state_pressed) {
setAlpha(PRESSED_ALPHA);
} else if (state == android.R.attr.state_selected) {
setAlpha(REGULAR_ALPHA);
} else if (state == android.R.attr.state_enabled) {
setAlpha(REGULAR_ALPHA);
}
}
return true;
}
1 ответ:
Это сработало для меня
StateListDrawable drawable = new StateListDrawable(); Bitmap enabledBitmap = ((BitmapDrawable)mIcon).getBitmap(); // Setting alpha directly just didn't work, so we draw a new bitmap! Bitmap disabledBitmap = Bitmap.createBitmap( mIcon.getIntrinsicWidth(), mIcon.getIntrinsicHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(disabledBitmap); Paint paint = new Paint(); paint.setAlpha(126); canvas.drawBitmap(enabledBitmap, 0, 0, paint); BitmapDrawable disabled = new BitmapDrawable(mContext.getResources(), disabledBitmap); drawable.addState(new int[] { -android.R.attr.state_enabled}, disabled); drawable.addState(StateSet.WILD_CARD, mIcon);