fra*_*ish 9 android android-resources android-drawable bitmapdrawable android-bitmap
由于BitmapDrawable不推荐使用无参数构造函数,我们必须为构造函数提供资源ID.
BitmapDrawable bitmapDrawable = new BitmapDrawable(res, bmap);
Run Code Online (Sandbox Code Playgroud)
res一般在哪里getResources().
为什么构造函数需要它,如果我们使用通用图像缓存,我们如何定义该值?
为什么构造函数需要它?
来自以下文件BitmapDrawable(Resources res, Bitmap bitmap):
从位图创建drawable,根据资源的显示指标设置初始目标密度.
因此,为了使用显示度量设置初始目标密度,DisplayMetrics需要这样做,并且将从Resources您作为参数提供的内容中获取BitmapDrawable.
如果我们使用通用图像缓存,我们如何定义该值?
对不起,无法理解这个问题.你能改写一下吗?
如果我自己已经缩放了Bitmap,为什么BitmapDrawable需要资源呢?
怎么BitmapDrawable知道,你已经缩放了Bitmap?通常情况下,如果你正在创建一个BitmapDrawable你不应该自己缩放它,这就是为什么API是这样设计的.
在将Bitmap转换为Drawable时,似乎避免缩放的唯一方法是使用不推荐使用的构造函数?
虽然这听起来很糟糕,但你可以看到从过渡框架类是如何使用该构造,例如ChangeBounds,Crossfade.
我已经挖了一些资源,并在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;
}
Run Code Online (Sandbox Code Playgroud)
这在以下链中被调用:
* BitmapDrawable#constructor
* BitmapDrawable#updateLocalState()
* BitmapDrawable#computeBitmapSize()
* Bitmap#getScaledWidth()
* scaleFromDensity(getWidth(), mDensity, targetDensity)
Run Code Online (Sandbox Code Playgroud)
如果你明确地设置您的密度Bitmap来DENSITY_NONE?然后if检查将评估为true并且不执行缩放.
Bitmap bitmap = ...
bitmap.setDensity(Bitmap.DENSITY_NONE);
Run Code Online (Sandbox Code Playgroud)
没有测试,只是根据来源做出假设.
小智 3
在此构造函数中,需要 getResources()“根据资源的显示指标设置初始目标密度”。我是这样理解的——你获取显示指标,其中包含有关大小、密度、字体缩放的信息,并将这些信息传递给构造函数。也许如果您的res/文件夹中的图像具有不同的尺寸 - 在适当的子文件夹中,例如drawable-ldpi, drawable-hdpi- 您将获得不同的信息。
要在图像缓存中使用它,您需要将 Context 传递给它,然后像这样调用:Context ctx; ctx.getResources();
希望有帮助。
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |