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