我创建了一个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本身。我承认,我不确定所有这些工作是如何深入进行的,如果对我做错的事情有任何建议,以及是否必须为分配给它们的每个对象创建单独的BitmapDrawable,或者我是否可以做其他事情,我将不胜感激。

最佳答案

BitmapDrawable是一个Drawable对象,包含诸如setState之类的特定于该对象实例的方法。因此,不,我认为BitmapDrawable不能轻易共享。 (您可能能够成功地重用它们,就像ListView缓存列表成员的Views一样;但是让BitmapDrawable同时住在两个或多个地方似乎要求太多。)

10-08 18:55