java - 是否可以将同一个 BitmapDrawable 分配给多个对象?

标签 java android bitmap

我创建了一个 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 或者我是否可以做其他事情。

最佳答案

BitmapDrawable 是一个 Drawable对象,包含诸如 setState 之类的方法非常特定于对象的实例。所以,不,我不认为可以轻松共享 BitmapDrawable。 (您可能能够成功地重用它们,就像 ListView 缓存列表成员的 View 一样;但是要求 BitmapDrawable 同时存在于两个或多个位置似乎要求太多了.)

关于java - 是否可以将同一个 BitmapDrawable 分配给多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113004/

相关文章:

java - 错误 - 多次出现具有不同值的 'contentType' 是非法的

winapi - HBITMAP 到 BITMAP 的转换

android - BitmapFactory.decodeStream 总是返回空值

android - 如何将位图转换为 Base64 字符串

java - 导入证书到cacerts时出现权限错误

java - wsimport maven 任务不起作用

java - 在第二个 Pane JavaFX 上修改元素时出现 NullPointerException

android - MVVM 跨 java.lang.ClassNotFoundException : Mvx. MvxListView

Android,将 WebView 与 loadData 一起使用

android - ListView 中的 webview : Touch events conflicts Hence unable to pinch Zoom IN/OUT in android