¿Cómo establecer el valor alfa para drawable en un StateListDrawable?

Quiero cambiar el valor alfa de un drawable cuando se presiona. Así que crear dos drawables y ponerlos en un StateListDrawable y establecer el valor de alfa para el estado presionado. Pero simplemente no funciona.

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); 

Actualización : Mi solución final es crear una subclase de BitmapDrawable como esto, y cambiar el valor de alfa en el método 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; } 

Esto funcionó para mí

  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); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.