मैं एक सामान्य फ्रेमवर्क फंक्शन बनाने की कोशिश कर रहा हूं, जो किसी भी ड्रॉबल को प्रेस / फोकस / सिलेक्टेड / इत्यादि होने पर हाइलाइट किया जाता है ।
मेरा कार्य एक ड्रॉबल लेता है और एक स्टेटलिस्टड्राइव को लौटाता है, जहां डिफ़ॉल्ट स्थिति ड्रॉबल ही है, और इसके लिए राज्य android.R.attr.state_pressed
एक ही ड्रॉबल है, बस एक फ़िल्टर का उपयोग करके लागू किया जाता है setColorFilter
।
मेरी समस्या यह है कि मैं ड्रॉबल को क्लोन नहीं कर सकता और लागू किए गए फिल्टर के साथ इसका एक अलग उदाहरण बना सकता हूं। यहाँ मैं प्राप्त करने की कोशिश कर रहा हूँ:
StateListDrawable makeHighlightable(Drawable drawable)
{
StateListDrawable res = new StateListDrawable();
Drawable clone = drawable.clone(); // how do I do this??
clone.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
res.addState(new int[] {android.R.attr.state_pressed}, clone);
res.addState(new int[] { }, drawable);
return res;
}
यदि मैं क्लोन नहीं करता हूं, तो फ़िल्टर स्पष्ट रूप से दोनों राज्यों पर लागू होता है। मैं के साथ खेलने की कोशिश की, mutate()
लेकिन यह मदद नहीं करता है ..
कोई विचार?
अपडेट करें:
स्वीकृत उत्तर वास्तव में एक ड्रॉबल क्लोन करता है। हालांकि इससे मुझे मदद नहीं मिली क्योंकि मेरा सामान्य कार्य एक अलग समस्या पर विफल है। ऐसा लगता है कि जब आप एक स्टेटलिस्ट में एक जोड़ने योग्य जोड़ते हैं, तो यह अपने सभी फिल्टर खो देता है।
ImageView.setImageDrawable
, जिसे मैं स्वीकृत उत्तर के लिए धन्यवाद के आसपास काम करने में सक्षम था।