Android 从资源中修改位图

Android 从资源中修改位图,android,graphics,Android,Graphics,我试图在ImageView的内容中添加一些内容,这些内容由参考资料中的Drawable表示。我知道资源中的所有Drawable在默认情况下都是不可变的,但即使在我调用mutable()方法并从此Drawable获取Bitmap以将其传递给Canvas对象后,我也会得到java.lang.IllegalStateException:传递给Canvas构造函数的不可变位图。代码如下: Drawable homeImage = mHomeImage.getBackground(); // my Ima

我试图在
ImageView
的内容中添加一些内容,这些内容由参考资料中的
Drawable
表示。我知道资源中的所有
Drawable
在默认情况下都是不可变的,但即使在我调用
mutable()
方法并从此
Drawable
获取
Bitmap
以将其传递给
Canvas
对象后,我也会得到
java.lang.IllegalStateException:传递给Canvas构造函数的不可变位图
。代码如下:

Drawable homeImage = mHomeImage.getBackground(); // my ImageView
homeImage.mutate();
Canvas c = new Canvas(((BitmapDrawable)homeImage).getBitmap());
是否有任何方法可以修改此
位图而不创建其副本?

尝试此方法

Bitmap bmp1 = (((BitmapDrawable)homeImage).getBitmap())
        .copy(Config.ARGB_8888, true);
Canvas c = new Canvas(bmp1);

您需要为画布创建一个新位图。由于画布使用我们传递的位图来存储绘制的内容,因此位图应该是可变的。

感谢您的回复,但正如您所见,我问:有没有办法在不创建副本的情况下修改此位图?我在前面看到了您的问题。我只是把代码放在上面,因为你问题中的代码不起作用。我不认为你可以修改位图而不创建它的副本。如果您试图在imageview上绘制某些内容。创建一个新位图并将新内容绘制到新位图中,然后使用framelayout将视图堆叠在彼此的顶部。它将显示为单个视图。不,我的目标是在图像顶部绘制wifi信号的状态,每3秒收听一次网络速度,我担心在复制
位图时会消耗内存,但没关系,谢谢您的回复。