Подтвердить что ты не робот

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

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

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

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

zoomedImage.setImageDrawable(dr);

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

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

Спасибо заранее.

4b9b3361

Ответ 1

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

Drawable drwNewCopy = dr.getConstantState().newDrawable().mutate();

Ответ 2

Мне удалось скопировать выделение, используя следующий код:

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

Здесь mutate() делает drawable mutable, чтобы не делиться своим состоянием, а getConstantState().newDrawable() создает новую копию.

Таким образом, разные ImageView используют разные чертежи и нет растяжения.

Ответ 3

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

Ответ 4

Вероятно, вы должны позвонить dr.clone, а затем вызвать mutate() на объекте

Это приведет к тому, что выталкиваемые не смогут использовать какое-либо состояние

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

Изменить: возможно просто

Drawable  newdr = dr.mutate();

будет работать. Дайте обе попытки