34

我有一个 ImageView。在它的 onClick 中,我得到了它的 Drawable:

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

并将其设置为对话框的 ImageView:

zoomedImage.setImageDrawable(dr);

但是当我关闭对话框或恢复活动时。原始位置的图像被拉伸并显示大于其大小,导致在 ImageView 中只有一部分图像可见。

这是深拷贝的情况还是有其他问题?如果是,我该如何深度复制原始的 Drawable 以便我可以将副本设置为缩放图像?

提前致谢。

4

4 回答 4

83

终于我成功了!我有类似的问题,当我在我的drawable上使用滤色器时,它改变了drawable,它非常接近其他人的解决方案,但只有这对我有用:

Drawable drwNewCopy = dr.getConstantState().newDrawable().mutate();
于 2014-08-23T13:05:04.433 回答
18

我设法使用以下代码复制了drawable:

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

这里mutate()使drawable可变以避免共享其状态,并getConstantState().newDrawable()创建一个新副本。

因此不同ImageView的 s 使用不同的可绘制对象并且没有拉伸。

于 2014-02-19T13:09:14.423 回答
1

使用BitmapFactory将可绘制对象转换为位图,分别对其进行或执行更改。

于 2012-10-25T08:27:30.827 回答
0

上述解决方案对我不起作用,但它有效

val myDrawable = DrawableCompat.wrap(view.background).mutate() as GradientDrawable
myDrawable.setColor(ContextCompat.getColor(view.context, R.color.White))
于 2021-01-12T12:44:25.130 回答