Saya mencoba membuat fungsi kerangka umum yang membuat semua Drawable menjadi disorot saat ditekan / difokuskan / dipilih / dll .
Fungsi saya mengambil Drawable dan mengembalikan StateListDrawable, di mana status defaultnya adalah Drawable itu sendiri, dan status untuk android.R.attr.state_presseddrawable yang sama, hanya dengan filter yang diterapkan menggunakan setColorFilter.
Masalah saya adalah saya tidak dapat mengkloning drawable dan membuat instance terpisah dengan filter yang diterapkan. Inilah yang saya coba capai:
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;
}
Jika saya tidak mengkloning, maka filter diterapkan secara jelas ke kedua status. Saya mencoba bermain dengan mutate()tetapi tidak membantu ..
Ada ide?
Memperbarui:
Jawaban yang diterima memang mengkloning drawable. Itu tidak membantu saya karena fungsi umum saya gagal pada masalah yang berbeda. Tampaknya saat Anda menambahkan drawable ke StateList, semua filternya akan hilang.