Android:如何以编程方式显示不同屏幕分辨率/大小的IMAGE

时间:2010-12-15 00:05:48

标签: android

我正在浏览Android上支持的多屏幕文档,需要一些澄清。

我的理解是,设计三个独特的接口(ldpi,mdpi和hdpi)将是支持所有潜在Android屏幕的最佳方式。

但是我相信当你在设计时这样做时,这将是正确的。

但是如果您在编程运行时以编程方式创建视图并想要设置背景图像,那么上述情况会成立吗?

我正在尝试使用以下内容在画布上绘制位图,

canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.image_1),0,0,null); 在我的自定义视图中扩展SurfaceView,然后在我的主要活动中使用此视图。

现在我使用的是image_1.png,使用gimp是480 * 800像素。

如果我在上面的代码中使用此图像,那么它无法正确显示并且图像显得更大,即图像对于屏幕显得太大,因此无法显示完整内容。

请问您能建议最好的方法是什么?

感谢, --ad

2 个答案:

答案 0 :(得分:0)

请参阅。 将图像放入3个不同大小和分辨率的文件夹中,即hdpi,ldpi和mdpi。你可以用这种方式调用图像:

R.drawable.image_name

不要担心android会照顾并在大屏幕上打开hdpi,因为在小屏幕中它将从ldpi打开图像。

定义时,高度和宽度使用dp作为单位而不是像素。

答案 1 :(得分:0)

嗯,我不太熟悉那个drawBitmap方法,但我确实在文档中看到了这一点:

“如果位图和画布具有不同的密度,则此功能将自动缩放位图,以与画布相同的密度进行绘制。”

在Bitmap上有一个getDensity和setDensity方法,所以你可以调用getDensity来查看它是什么,然后在drawBitmap之前试验setDensity,看看是否有帮助。

注意:Canvas还有一个getDensity方法,因此您可以将其打印到日志中,看看将Bitmap密度设置为相同的值是否可以防止缩放问题。

还有:drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)方法,在文档中说明:“此函数忽略与位图关联的密度。这是因为源和目标矩形坐标空间各自的密度,所以必须已经应用了适当的比例因子。“