gpt4 book ai didi

android - BitmapDrawable 构造函数中的 "Resources"到底是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:41 27 4
gpt4 key购买 nike

由于不推荐使用无参数的BitmapDrawable构造函数,我们必须将资源 ID 提供给构造函数。

BitmapDrawable bitmapDrawable = new BitmapDrawable(res, bmap);

res一般是getResources()

为什么构造函数需要它,如果我们使用通用图像缓存,我们如何定义该值?

最佳答案

Why does the constructor need it?

来自 BitmapDrawable(Resources res, Bitmap bitmap) 的文档:

Create drawable from a bitmap, setting initial target density based on the display metrics of the resources.

因此,这是使用显示指标设置初始目标密度所必需的,DisplayMetrics 将从您提供的 Resources 中获取BitmapDrawable 的参数。

How can we define that value if we are using a general image cache?

抱歉,无法理解问题。你能改一下吗?

If I have already scaled the Bitmap myself, why does BitmapDrawable need resources?

BitmapDrawable 如何知道您已经缩放了 Bitmap?通常,如果您正在创建一个 BitmapDrawable,您不应该自行处理缩放,这就是 API 以这种方式设计的原因。

It seems like the only way to avoid scaling when converting a Bitmap to a Drawable is to use the deprecated constructor?

虽然这听起来很糟糕,但您可以看到转换框架中的类如何使用该构造函数,例如ChangeBoundsCrossfade

我挖掘了一些资源,在 Bitmap 类中找到了这段代码:

static public int scaleFromDensity(int size, int sdensity, int tdensity) {
if (sdensity == DENSITY_NONE || tdensity == DENSITY_NONE || sdensity == tdensity) {
return size;
}

// Scale by tdensity / sdensity, rounding up.
return ((size * tdensity) + (sdensity >> 1)) / sdensity;
}

这是在以下链中调用的:

* BitmapDrawable#constructor
* BitmapDrawable#updateLocalState()
* BitmapDrawable#computeBitmapSize()
* Bitmap#getScaledWidth()
* scaleFromDensity(getWidth(), mDensity, targetDensity)

如果您将 Bitmap 的密度显式设置为 DENSITY_NONE 会怎样?然后 if 检查将计算为 true 并且不会执行缩放。

Bitmap bitmap = ...
bitmap.setDensity(Bitmap.DENSITY_NONE);

没有测试,只是根据来源做出假设。

关于android - BitmapDrawable 构造函数中的 "Resources"到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com