2011-07-15 18 views
5

Basılıyken alfanın alfa değerini değiştirmek istiyorum. Bu yüzden iki tane çizim öğesi oluşturabilir ve bunları bir StateListDrawable içine yerleştirir ve basılan durum için alfa değerini ayarlar. Ama sadece işe yaramıyor.Bir StateListDrawable'da çizilebilir için alfa değeri nasıl ayarlanır?

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

Güncelleme: Benim son çözüm onStateChange() yönteminde alfa değerini bu, gibi BitmapDrawable bir alt sınıfını oluşturup değiştirmektir.

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; 
} 
+0

Arg, sadece aynı sorunu vurmak benim için çalıştı! Düzeltirsem haber vereceğim! –

+0

Yardım ettim. Drawable'ı genişletirseniz, @Override public boolean isStateful() { true değerini döndürmeniz gerekir; } –

cevap

6

Bu

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

Bu, ancak dikkatli olun, bitmapler oluşturmak her zaman belleğinizde büyük birer birer oluşturur. –

İlgili konular