【问题标题】:Android: How to display IMAGE for Different screen resolutions/size programmaticallyAndroid:如何以编程方式显示不同屏幕分辨率/尺寸的图像
【发布时间】:2011-05-25 15:18:12
【问题描述】:

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

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

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

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

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

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

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

如果我在上面的代码中使用此图像,则它无法正确显示并且图像看起来更大,即图像对于屏幕来说显得太大,因此无法显示全部内容。

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

谢谢, --广告

【问题讨论】:

  • 感谢您的回复。这是否意味着我需要按照以下 dpi 创建图像,-ldpi 是 ~120dpi,-mdpi 是 ~160dpi,-hdpi 是 ~240dpi。并且不必担心图片大小?我的意思是考虑到上述 dpi,我可以创建任何大小的图像,并且 android 会在设备中显示时处理这个问题? ——

标签: android


【解决方案1】:

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

“如果位图和画布的密度不同,这个函数会自动缩放位图,以与画布相同的密度进行绘制。”

Bitmap 上有 getDensity 和 setDensity 方法,因此您可以调用 getDensity 来查看它是什么,然后在 drawBitmap 之前尝试 setDensity 以查看是否有帮助。

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

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

【讨论】:

  • 感谢您的回复。这是否意味着我需要按照以下 dpi 创建图像,-ldpi 是 ~120dpi,-mdpi 是 ~160dpi,-hdpi 是 ~240dpi。并且不必担心图片大小?我的意思是考虑到上述 dpi,我可以创建任何大小的图像,并且 android 会在设备中显示时处理这个问题? ——
【解决方案2】:

看。 将图像放在具有不同大小和分辨率的 3 个文件夹中,即 hdpi、ldpi 和 mdpi。你可以这样调用图像:

R.drawable.image_name

别担心 android 会小心,在大屏幕上它会打开 hdpi,而在小屏幕上它会从 ldpi 打开图像。

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

【讨论】:

  • 感谢您的回复。这是否意味着我需要按照以下 dpi 创建图像,-ldpi 是 ~120dpi,-mdpi 是 ~160dpi,-hdpi 是 ~240dpi。并且不必担心图片大小?我的意思是考虑到上述 dpi,我可以创建任何大小的图像,并且 android 会在设备中显示时处理这个问题?
  • 是的。创建 -ldpi 是 ~120dpi,-mdpi 是 ~160dpi,-hdpi 是 ~240dpi 图像大小将根据分辨率显示它们。你不必担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2013-03-17
  • 2011-11-15
相关资源
最近更新 更多