2011-07-15 12 views
5

जब मैं दबाया जाता हूं तो मैं ड्रॉ करने योग्य के अल्फा मान को बदलना चाहता हूं। तो मैं दो drawables बनाते हैं और उन्हें एक राज्य सूची में डाल दिया और दबाए गए राज्य के लिए अल्फा मान सेट करें। लेकिन यह सिर्फ काम नहीं करता है।एक राज्य सूची में खींचने योग्य के लिए अल्फा मान कैसे सेट करें?

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

Arg, मैं तो बस एक ही समस्या मारा! अगर मैं इसे ठीक करता हूं तो आपको बताने की कोशिश करूंगा! –

+0

मेरी मदद की। यदि आप Drawable का विस्तार करते हैं तो आपको @Override सार्वजनिक बूलियन isStateful() { वापस लौटने की आवश्यकता है; } –

उत्तर

6

यह मेरे लिए काम किया

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

यह काम करता है लेकिन सावधान रहें, बिटमैप्स बनाना हमेशा आपकी याददाश्त पर एक बड़ा दांत है –