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_pressed
drawable 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.