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