Глубокая копия Drawable
У меня есть ImageView. В своем onClick я получаю его Drawable:
Drawable dr = ((ImageView) v).getDrawable();
И установите его в диалог ImageView:
zoomedImage.setImageDrawable(dr);
Но когда я закрываю диалог или действие возобновляется. Изображение в исходном положении растягивается и отображается больше его размера, что приводит к тому, что в ImageView видна только часть изображения.
Это случай глубокой копии или есть еще одна проблема?
Если это так, как можно сделать глубокую копию оригинального Drawable, чтобы я мог установить копию в увеличенное изображение?
Спасибо заранее.
Ответы
Ответ 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();
будет работать. Дайте обе попытки