2016-04-12 7 views
1

У меня есть активность с некоторыми пунктами меню, для которого я изменить значок цвета, как это:Drawable ColorFilter держал через активность Transitions для того же ресурса

private void colorMenuItem(MenuItem item) { 
    if (item != null) { 
    Drawable icon = item.getIcon(); 
    if (icon != null) { 
     icon.setColorFilter(getResources().getColor(R.color.some_color), PorterDuff.Mode.SRC_ATOP); 
    } 
    } 
} 

Иконки белые Drawable PNG файлы с иконкой материала задавать. Это работает так, как ожидалось, и элементы меню окрашены по желанию.

Однако, когда я запускаю другое действие, которое использует один и тот же ресурс, который уже был окрашен, но в другом представлении (например, FAB вместо меню) ColorFilter для этого вида остается. Почему это?

Не должен ли FAB загружать файл ресурсов снова и не должен быть белым (или неизменным)?

ответ

1

However, when I start another activity which makes use of the same drawable resource which was already colored, but in another view (e.g a FAB instead of the menu), the ColorFilter for this view remains. Why is that?

Это происходит потому, что рисуем или растровый был кэшируются и, следовательно, следующий вызов к тому же вытяжке идентификатор будет тот же рисуем, что уже было окрашено ранее.

Чтобы исправить это, нужно сначала мутировать сначала выталкиваемый, прежде чем использовать его, чтобы иметь другой экземпляр, чтобы предотвратить его кеширование.

Drawable icon = item.getIcon().mutate(); //mutate it to prevent caching

+0

Я думал, что так будет, но мутация, похоже, не исправляет это. Я даже попытался установить его в пункт меню снова после его мутации, но все равно не повезло. – peshkira

+0

@peshkira опубликуйте свой текущий подход –

+0

1) Я раздуваю меню. 2) Я получаю пункт меню. 3) Я покрасьте пункт меню, как указано выше +, ваше предложение о мутации. 4) Элемент меню покрашен как ожидалось. 5) Я перехожу к другому действию, которое имеет фабрику с тем же ресурсом, что и значок src. 6) значок src фабрики также окрашен вместо обычного цвета. Я попытаюсь опубликовать скриншоты позже – peshkira

0

У меня была такая же проблема, прежде чем, как я помню, фильтр применяется каждый ресурс изображения, на который ссылается. Вы можете использовать

icon.setColorFilter(null)

Для сброса цветного фильтра на ресурс при следующем использовании. Таким образом, любой фильтр был применен до того, как это изображение будет удалено.