Android 如何确定加载了哪些位图资源(ldpi、mdpi或hdpi)?

Android 如何确定加载了哪些位图资源(ldpi、mdpi或hdpi)?,android,screen,resolution,dpi,Android,Screen,Resolution,Dpi,我创建了多个位图-每个文件夹一个(mdpi、hdpi、ldpi)。有人能给我看一些代码或者给我指一个合适的方法,让我检测安卓决定加载哪个资源 谢谢,我不确定如何处理代码,但出于测试目的,我添加了一个名为resolution.png的小图标,它在ldpi中有一个版本,其中有字母“l”,mdpi的版本中有字母“m”,hdpi的版本中有字母“h”。这样您就可以看到正在加载哪个版本的资源 大多数时候,我在布局中用注释掉的数据进行测试,当我想调查时,我会取消注释。从DisplayMetric获取densi

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


谢谢,

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


大多数时候,我在布局中用注释掉的数据进行测试,当我想调查时,我会取消注释。

从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
}

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

资源可以作为原始数据访问:使用
然后您可以使用从数据流创建位图。

这在位图本身--()

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


如果你这样做是为了生产代码,我会有点不舒服,因为一般来说,应用程序要么让框架负责密度,要么自己负责密度(例如,将位图放在可绘制的nodpi中)。如果你在玩基于加载密度的位图游戏,你可能会射中自己的脚。或者你可能很好,因为我真的不知道你在做什么

多谢各位。我会研究这个方法的。谢谢你的提示。这将有助于测试。谢谢你的代码。我在onSizeChanged中试用了它,它在我的视图中标记为错误“getWindowManger()在类型GameView中未定义”,其中GameView是我的自定义视图,用于在画布上绘制位图、处理触摸事件等。。。如果我将其放在启动此视图的活动中,则不会出现错误。。我计划在onSizeChanged中执行此操作,因此我可以设置一些标志来更改绘制位图的方式,处理touchevents并根据加载的位图绘制位图。但是,我想我会在父活动中设置标志。谢谢。我正在通过getResources()加载,R.drawable,它将始终是位图。这是否会在prod中结束还有待确定。这取决于我在那之前学到了什么。如果框架总是选择正确的密度,我就不必做那么多,但我不想假设它没有bug,所以我想验证它选择了我期望的基于屏幕尺寸的内容。如果没有,我将自己缩放并设置一些值,这样我可以计算位图在屏幕上的位置。我需要此信息还有其他一些原因,但我在这条评论中键入的字符已经用完了。您可能不想自己缩放它——框架将根据其位图密度相对于设备(或目标画布)密度自动缩放可绘制文件(包括向您报告的尺寸)。有很多微妙的事情要做,以确保一个可绘制的密度不同于应用程序的工作密度将表现为它在应用程序的密度。这是密度兼容性代码的基础,确保在1.6之前编写的应用程序仍能在具有不同密度屏幕的设备上工作。我考虑这样做的原因之一是当我有一个480 x 800的背景位图,并在480 x 854显示器上测试时,底部有一个间隙。换句话说,它不会自动缩放到那个屏幕。当我自己把代码放进去扩展它时,它看起来很好。你是说它应该自动缩放到480 x 854屏幕吗?哈克博德,我想了想你说的-也许我做了一些更根本的错误。我想我会发布另一个问题,问一个关于dpi和扩展的更基本的问题。我做了一些测试,现在我知道我对什么有误解了。我把背景位图设计成在dpi目录中占据全屏。我原以为为480 x 800屏幕制作的240dpi位图将通过框架进行缩放,以适合分辨率为480 x 854的240dpi屏幕。现在我明白了,这些目录不会进行任何缩放。看起来它们真的是为了让你把你预先缩放的图像放进去,比如定制的按钮或者飞船或者其他小的图像。它们不适用于背景,因为它们确实需要缩放到屏幕分辨率。