Глубокая копия Drawable

У меня есть ImageView. В его onClick я получаю его Drawable:

Drawable dr = ((ImageView) v).getDrawable();

И установите его в ImageView диалога:

zoomedImage.setImageDrawable(dr);

Но когда я закрываю диалог или работа возобновляется. Изображение в исходном положении растягивается и отображается больше его размера, в результате чего в ImageView видна только часть изображения.

Это случай глубокого копирования или есть другая проблема? Если это так, как я могу глубоко скопировать оригинал Drawable, чтобы я мог установить копию в увеличенное изображение?

Заранее спасибо.

Ответы на вопрос(4)

Решение Вопроса

когда я использовал цветной фильтр на моем рисованном объекте, он изменил рисованный, он очень близок к решению других людей, но только это сработало для меня:

Drawable drwNewCopy = dr.getConstantState().newDrawable().mutate();
 Neela13 окт. 2015 г., 20:33
это работает для меня ..
 carl13 дек. 2016 г., 11:23
НАКОНЕЦ-ТО! Это решение для создания автономной копии отрисовки. Для mutate () оригинальный drawable не является хорошим решением, он не всегда работает. Создание новой копии из кеша drawable (то есть getContantState ()) работает. Этот комментарий для других, которые провели часы за часами на этом незрелом / незавершенном API.

drawable.mutate().getConstantState().newDrawable();

Вотmutate() делает изменяемый объект изменяемым, чтобы избежать разделения его состояния, иgetConstantState().newDrawable() создает новую копию.

Таким образом, разныеImageViews использовать разные drawables и нет растяжения.

BitmapFactory для преобразования нарисованного в растровое изображение отдельно внесите или внесите в него изменения.

dr.clone а затем позвонитеmutate() на объекте

Это сделает ничью не доступной для любого штата

Drawable newdr = dr.clone();
newdr = newdr.mutate();

Редактировать: Может быть, просто

Drawable  newdr = dr.mutate();

будет работать. Дать обоим попробовать

 ernazm19 февр. 2014 г., 14:05
Мутат не копирует рисование. Возвращает тот же объект. И Drawable не имеетclone()

Ваш ответ на вопрос