我创建了多个位图 - 每个文件夹(mdpi、hdpi、ldpi)一个。有人可以给我看一些代码或指出适当的方法,让我能够检测 Android 决定加载哪个资源。
谢谢,
我创建了多个位图 - 每个文件夹(mdpi、hdpi、ldpi)一个。有人可以给我看一些代码或指出适当的方法,让我能够检测 Android 决定加载哪个资源。
谢谢,
从 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
}
这在位图本身中可用 - http://developer.android.com/reference/android/graphics/Bitmap.html#getDensity ()
如果您通过更高级别的 Resources.getDrawable() API 加载它,您将没有位图,而只有一个抽象的 Drawable。如果您可以保证资源始终是位图(而不是九个补丁或其他类似的东西),您可以将其转换为 BitmapDrawable 并从中获取位图。
如果您正在为生产代码执行此操作,我会对此感到有些不自在,因为通常应用程序应该让框架处理密度,或者自己处理所有内容(例如,将位图放在 drawable-nodpi 中) . 如果您正在玩基于加载密度的位图游戏,您可能会在自己的脚下开枪。或者你可能很好,因为我真的不知道你在做什么。:)
我不确定可以用代码做什么,但出于测试目的,我添加了一个名为 resolution.png 的小图标,该图标在 ldpi 中有一个版本,其中有字母“l”,mdpi 的版本有一个字母“m”在其中,hdpi 的版本中包含字母“h”。这样您就可以看到正在加载哪个版本的资源。
我测试它大部分时间都在布局中注释掉,并在我想调查时取消注释。
直接加载 Bitmap 并将其与通过资源加载的 Bitmap 进行比较:
资源可以作为原始数据访问:使用AssetManager.open(..) 然后您可以使用BitmapFactory.decodeStream(..)从数据流创建位图。