2012-11-19 31 views
5

पर मैं बहुत अजीब घटना है जब मैं StateListDrawable इस्तेमाल करने की कोशिश:साफ़ नहीं StateListDrawable व्यवहार एंड्रॉयड

मैं एक राय यह है कि ImageView, जहां मैं अपने निर्माता में StateListDrawable का उपयोग फैली है। मेरी समस्या पेश करने के लिए मेरे पास 2 कोड स्निपेट हैं। पहले एक:

public class MyView extends ImageView{ 
Resources r = getResources(); 
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);      
filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));          
setImageDrawable(filteredDrawable); 
} 

और दूसरा एक:

public class MyView extends ImageView{ 
Resources r = getResources(); 
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale); 

filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1)); 

StateListDrawable states = new StateListDrawable(); 
states.addState(new int[] {android.R.attr.state_pressed}, filteredDrawable); 
states.addState(new int[] {android.R.attr.state_focused}, filteredDrawable); 
states.addState(new int[] {}, r.getDrawable(R.drawable.smallsale)); 

//Notice I do not use 'states' at all... 
setImageDrawable(filteredDrawable); 

}

(मैं इस कोड को जानते भावना का एक बहुत नहीं है - मैं बनाने के लिए समस्या को आसान बनाने के लिए करना चाहता था प्रश्न स्पष्ट है)। समस्या यह है कि पहली sinppet पर सबकुछ ठीक काम करता है - मैंने ड्रॉइंग पर एक रंग फ़िल्टर सेट किया है और यह दिखाया गया है। लेकिन दूसरे टुकड़ा पर, StateListDrawable उदाहरण किसी भी तरह फिल्टर पर प्रभाव, और मूल drawable दिखाया जा रहा है, भले ही मैं कभी नहीं setImageDrawable(states) फोन करके ImageView के लिए यह जुड़ा हुआ है।

क्या कोई मुझे बता सकता है कि क्या हो रहा है? मेरा लक्ष्य इस प्रकार अलग-अलग राज्यों के लिए ही drawable साथ StateListDrawable उपयोग करने के लिए है:

StateListDrawable states = new StateListDrawable(); 
states.addState(new int[] {android.R.attr.state_pressed}, filteredDrawable); 
states.addState(new int[] {android.R.attr.state_focused}, filteredDrawable); 
states.addState(new int[] {}, r.getDrawable(R.drawable.smallsale)); 
setImageDrawable(states); 

(मैं कोड से यह सब करने की ज़रूरत है, क्योंकि मेरी drawable नेट से गतिशील रूप से लोड किया जाना चाहिए, और नहीं एक संसाधन के रूप में)

उत्तर

3

ठीक है। मैंने पाया this post

ऐसा लगता है कि StateListDrawables किसी कारण से फिल्टर खो देता है ... मैं SnoK के समाधान ले लिया और यह मेरे लिए महान काम करता है।

मुझे नहीं पता कि Google को यह क्यों नहीं लगता कि इसे दस्तावेज़ों पर साइड इफेक्ट के रूप में नोट किया जाना चाहिए ...