我创建了一个 BitmapDrawable,稍后我在这样的函数中分配给几个对象(不完全像这样,但为了测试目的,它被剥离了):
Drawable CreateBitmap(int col)
{ Bitmap b = Bitmap.createBitmap(50, 50, Config.ARGB_8888);
Canvas c = new Canvas(b);
c.drawColor(col);
return new BitmapDrawable(b);
}
这有效并为我创建了一个大小为 50 x 50 的 BitmapDrawable,我保存在内存中。然后我将这个 BitmapDrawable 分配给各种按钮、复选框,无论出现什么并需要某种颜色。
我遇到的问题是 BitmapDrawables 以某种方式被截断。看来,如果我将它分配给一个高度为 80 的按钮,然后是一个高度为 160 的按钮,第一个被很好地填充,而后者只被填充了一半。看起来 BitmapDrawable 被设置为它的第一次使用,并且所有后续分配都受它的限制。有时它会立即发生,有时它仅在我切换到另一个选项卡并返回到前一个选项卡时才会发生。
我认为 BitmapDrawable 将在内存中保持 50x50,并且分配给它的对象要么获得具有适当大小的自己的版本(或在渲染时制作调整大小的副本),而不是它以某种方式更改 BitmapDrawable 本身。我承认,我不确定所有这些是如何深入工作的,如果我必须为我分配给它们的每个对象创建单独的 BitmapDrawables 或者我是否可以做其他事情,我将不胜感激。