Android / drawable-nodpi / loading缩放

时间:2010-10-19 16:32:17

标签: android bitmap scale

  

可能重复:
  Android app loading images from /drawables-nodpi/ with scaling

我最近将我的Android项目重建为2.1的目标2.2。

在旧项目中,我没有指定目标SDK(清单不包含类似:android:minSdkVersion =“8”)。这在运行时在控制台中给我一个错误,但一切正常,所以我没有愚弄它。

新项目现在在清单中使用android:minSdkVersion =“8”。

但是现在来自/ drawable-nodpi /文件夹的drawables正在加载缩放,使它们更小并且显着改变了所需的视觉效果。

如果我从我的清单中删除了标签,它们会正确加载而不会缩放。

即使像这样加载我的图片:

        BitmapFactory.Options opts = new BitmapFactory.Options();
        opts.inScaled = false;   
        Bitmap bm = BitmapFactory.decodeResource(_resources, resId, opts);

当我在清单中声明最小SDK时,它们仍然会缩放,但如果删除该标记则不会缩放。

为什么会这样?如何在没有缩放的情况下加载它们,同时仍然声明最小的SDK?

3 个答案:

答案 0 :(得分:1)

here还有另一种解释:

“如果您未指定< supports-screens>或minSdk,那么您的应用将以兼容模式运行,这意味着它会被赋予HVGA(240x320)”虚拟屏幕“,然后将其整体缩放。所以你的图像将被缩放。“

原来的海报因此在此兼容模式下运行他们的应用程序,图像自动从HVGA放大到实际的屏幕分辨率;通过添加minSdkVersion,图像不再缩放,因此显得更小。

答案 1 :(得分:0)

当您设置minsdkversion时,您告诉Android该应用可以在API级别8(Android 2.2)下运行。之前由于您没有指定,Android知道如何处理资产,但现在使用清单中的minsdkversion行提供指导。

了解如何在Android herehere中实施所有资产和资产层次结构。这可能不是您想要的快速解决方案,但它可以帮助您更好地了解Android平台。

答案 2 :(得分:0)

我知道这是一个古老的问题,答案今天对你来说可能意义不大,但因为我只是在一天半的时间内与之搏斗,我想我会把答案扔给其他人。

无论我做什么,我的图像都会以奇怪的比例从资源中加载。我尝试了各种方法,从使用Options.inScaled = false到设置inDensity = 160,甚至使用InputStream并解码流中的位图。没有什么工作......原始尺寸为340x480的图像总是加载一些奇怪的尺寸,如321x481,无论如何。

我去查看源图像本身,看看它保存了什么dpi / ppi。图像是以正确的尺寸创建的,但其内部ppi为72.我将图像更改为渲染为160ppi(这会炸毁尺寸),然后将尺寸缩小回原始像素。使用这个新的源图像,在160ppi与显示器的160dpi匹配时,它的呈现方式与预期一样,没有任何奇怪的缩放。

所以请记住,如果你的源图像根本不是要缩放的,你应该确保将它们设置为与你的密度匹配的ppi,或者当你从bitmapfactory解码位图时,选项指定了ppi图像本身是为了填充而创建的。