Я намагаюся зробити загальну фреймворкову функцію, яка робить будь-який Drawable виділеним при натисканні / фокусуванні / виборі / тощо .
Моя функція приймає Drawable і повертає StateListDrawable, де за замовчуванням стан є Drawable, а стан for 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()
але це не допомагає ..
Будь-які ідеї?
Оновлення:
Прийнята відповідь справді клонує малюнок. Це мені не допомогло, оскільки моя загальна функція не працює з іншою проблемою. Здається, коли ви додаєте малюнок до списку стану, він втрачає всі свої фільтри.