3

我创建了多个位图 - 每个文件夹(mdpi、hdpi、ldpi)一个。有人可以给我看一些代码或指出适当的方法,让我能够检测 Android 决定加载哪个资源。

谢谢,

4

4 回答 4

4

从 DisplayMetric 获取 densityDPI 并根据预定义的常量对其进行检查

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

switch(metrics.densityDpi)
{
case DisplayMetrics.DENSITY_HIGH: //HDPI
case DisplayMetrics.DENSITY_LOW:  //LDPI
case DisplayMetrics.DENSITY_MEDIUM: //MDPI
}
于 2010-11-14T21:43:04.387 回答
2

这在位图本身中可用 - http://developer.android.com/reference/android/graphics/Bitmap.html#getDensity ()

如果您通过更高级别的 Resources.getDrawable() API 加载它,您将没有位图,而只有一个抽象的 Drawable。如果您可以保证资源始终是位图(而不是九个补丁或其他类似的东西),您可以将其转换为 BitmapDrawable 并从中获取位图。

如果您正在为生产代码执行此操作,我会对此感到有些不自在,因为通常应用程序应该让框架处理密度,或者自己处理所有内容(例如,将位图放在 drawable-nodpi 中) . 如果您正在玩基于加载密度的位图游戏,您可能会在自己的脚下开枪。或者你可能很好,因为我真的不知道你在做什么。:)

于 2010-11-15T02:48:28.213 回答
1

我不确定可以用代码做什么,但出于测试目的,我添加了一个名为 resolution.png 的小图标,该图标在 ldpi 中有一个版本,其中有字母“l”,mdpi 的版本有一个字母“m”在其中,hdpi 的版本中包含字母“h”。这样您就可以看到正在加载哪个版本的资源。

我测试它大部分时间都在布局中注释掉,并在我想调查时取消注释。

于 2010-11-14T21:30:19.417 回答
0

直接加载 Bitmap 并将其与通过资源加载的 Bitmap 进行比较:

资源可以作为原始数据访问:使用AssetManager.open(..) 然后您可以使用BitmapFactory.decodeStream(..)从数据流创建位图。

于 2010-11-14T21:46:18.690 回答