图像显示在设备上但不在模拟器上? Android的

时间:2012-10-23 20:55:43

标签: android image android-emulator android-sdk-2.3

在我的应用程序的一部分中,我使用以下方法检查屏幕密度:

float sdpi = ApplicationConstants.ref_currentActivity.getResources().getDisplayMetrics().density;
if(sdpi == 0.75)
    {
        ApplicationConstants.screenSize = "small";
    }
    else if(sdpi == 1.0)
    {
        ApplicationConstants.screenSize = "medium";
    }
    else if(sdpi == 1.5)
    {
        //Message.inform("Setting Screen Size", "sdpi is:" + sdpi + " so screen size is large");
        ApplicationConstants.screenSize = "large";
    }
    else if(sdpi == 2.0)
    {
        ApplicationConstants.screenSize = "xlarge";
    }

然后在另一部分我只是有一个加载右图像位图的方法,基于screenSize:

   if(ApplicationConstants.screenSize.equals("small"))
    {
        imageName = imageName + "s";
    }
    else if(ApplicationConstants.screenSize.equals("medium"))
    {
        imageName = imageName + "m";
    }
    else if (ApplicationConstants.screenSize.equals("large"))
    {
        imageName = imageName + "l";
        //Message.inform("ImageName should have an l at the end", imageName );
    }
    else imageName = imageName + "x";

所以基本上 - 如果我调用findImageByName(“SomeImage”), 然后图像名称将根据屏幕密度更改为SomeImages(小),SomeImagem(中),SomeImagel(大),SomeImagex(xlarge) - 然后我使用imageName从我从jar文件中提取的图像中创建一个drawable。

我看到这在我的mdpi屏幕设备上运行得很好 - 但在模拟器上我没有显示它们应该在哪里的图像。

我想也许我只是在某个地方犯了一个愚蠢的错误,所以我将ApplicationConstants.screenSize更改为“中等”,即使我的sdpi为1.5,仍然没有在模拟器运行时加载图像。

有人遇到过这个问题吗?

注意:我以这种方式加载图像的原因是因为它是一个modularImageLoader类,它从jar文件加载图像。 jar文件包含我在运行时使用DexClassLoader动态加载的.class所需的图像。如果有人对动态模块加载的过程有任何疑问 - 请随意询问,我将解释为什么我按照我的方式加载图像。

任何帮助表示赞赏:)同伴StackOverflowers。

注意:我目前无法访问hdpi-real life Android设备。否则我会在那里测试一下是否有效。

修改

我已经设法让它在模拟器上运行 - 但这不使用状态...我最终需要在按钮上使用它们以确保它们看起来像是被点击了。

以下是有效的:

B [I] .setBackgroundDrawable(ApplicationConstants.moduleImageLoader.findImageByName(drawable_normal));

,这是不起作用的:但应该!

states.addState(new int [] {},ApplicationConstants.moduleImageLoader.findImageByName(drawable_normal)); B [I] .setBackgroundDrawable(状态);

b是一组按钮。 ApplicationConstants.modularImageLoader获取当前模块的正确imageLoader。 findImageByName采用“imageName”根据屏幕密度附加s,m,l,x并返回该名称的drawable匹配(即在我的模块jar中具有该名称的图像文件)。 ModularImage加载程序与我的模块Loader密切配合 - 确保为其相应的模块加载正确的imageLoader。

知道为什么州在这种情况下不起作用?任何帮助表示赞赏......我使用状态不正确吗?

2 个答案:

答案 0 :(得分:1)

除非那些是拼写错误,否则我认为您最可能的问题是假设密度与屏幕尺寸相对应。实际上,它很可能与您编码的内容相反(例如,密度越高,屏幕尺寸越小 - 通常),因为屏幕越大,像素的传播越远,导致更低密度。当然,可以增加屏幕分辨率以补偿并提高密度,但在大多数情况下,密度更高的屏幕比密度更低的屏幕更小。

答案 1 :(得分:0)

我相信有多种可能性,例如:

  • 模拟器中图像的路径不同
  • 图像在模拟器中不存在
  • 没有足够的内存来加载图像(尝试更小的尺寸或更改模拟器的内存设置)