我正在浏览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
答案 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)
方法,在文档中说明:“此函数忽略与位图关联的密度。这是因为源和目标矩形坐标空间各自的密度,所以必须已经应用了适当的比例因子。“