Я пытаюсь создать общую функцию фреймворка, которая заставляет любой 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()
но это не помогает ..
Любые идеи?
Обновить:
Принятый ответ действительно клонирует возможность рисования. Но это не помогло мне, потому что моя общая функция не работает по другой проблеме. Похоже, что когда вы добавляете объект в StateList, он теряет все свои фильтры.