Я пытаюсь создать общую функцию фреймворка, которая позволяет выделить любой Drawable, когда нажата/сфокусирована/выбрана/etc.
Моя функция принимает Drawable и возвращает StateListDrawable, где состояние по умолчанию - это сам Drawable, а состояние для android.R.attr.state_pressed
- одно и то же, как и для фильтра, используемого с помощью 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()
, но это не помогает..
Любые идеи?
Update:
Принятый ответ действительно клонирует приемлемый. Это мне не помогло, потому что моя общая функция не срабатывает по другой проблеме. Кажется, что когда вы добавляете drawable в StateList, он теряет все свои фильтры.