ฉันพยายามที่จะทำให้ฟังก์ชั่นกรอบทั่วไปที่ทำให้ Drawable ใด ๆ กลายเป็นไฮไลต์เมื่อกด / มุ่งเน้น / เลือก / etc
ฟังก์ชั่นของฉันใช้เวลา Drawable และผลตอบแทน StateListDrawable ที่รัฐเริ่มต้นคือ Drawable ตัวเองและของรัฐเพื่อandroid.R.attr.state_pressed
เป็น drawable 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()
แต่มันไม่ช่วย ..
ความคิดใด ๆ ?
อัปเดต:
คำตอบที่ได้รับการยอมรับคือการลอกแบบที่เบิกได้ มันไม่ได้ช่วยฉันเลยเพราะฟังก์ชันทั่วไปของฉันล้มเหลวในปัญหาอื่น ดูเหมือนว่าเมื่อคุณเพิ่ม drawable ลงใน StateList มันจะสูญเสียตัวกรองทั้งหมด