0

我的问题就在标题中。我尝试将图像添加到我的布局中,我尝试使用带有 wrap_content 宽度和高度的 FrameLayout 背景,还尝试使用带有所有可能 fitScale 属性的 imageView。

我只是不明白为什么我的 720 像素宽度的图像在我手机屏幕的宽度上是一半,这是一个 720 像素宽度的三星 Galaxy S3....

我真正的问题:

确保我在应用中的照片不会失真的最佳方法是什么?

4

1 回答 1

3

首先,您需要考虑屏幕密度和倾角值,而不是像素。这意味着您正在处理“虚拟屏幕”,其中 1 个下降(密度独立像素)代表不同数量的实际屏幕像素,具体取决于设备。

对于可绘制对象,您可以使用以下类别在任何屏幕上获得清晰的结果:

  • ldpi(比例因子 0.75)
  • mdpi(默认/基线:比例因子 1.0)
  • hdpi (1.5)
  • xhdpi (2.0)

根据这些比例因子创建不同大小的位图版本,以便在任何屏幕上获得清晰的结果。您应该从最高分辨率的 xhdpi 开始,以避免因放大而造成质量损失。

将这些不同的版本放入各自的可绘制文件夹(res/drawable-ldpi、res/drawable-mdpi...)。同一个位图的这些不同版本当然必须具有相同的文件名,否则将不起作用。

其次,您不应该对设备屏幕的高度和宽度做出强烈的假设。您需要对视图和图形进行布局,以便它们在不知道确切屏幕分辨率的情况下动态利用整个屏幕。但是,您可以根据配置限定符对这些屏幕分辨率做出较弱的假设

  • 小的
  • 普通的
  • 大的
  • 超大

尽量避免基于任何假设的视图的固定大小。始终避免在布局 XML 文件中使用“px”值。改用“蘸”。

阅读支持多个屏幕的文档以获取更多信息。

您想要实现的声音就像您希望图像占据屏幕的整个宽度一样。

如果将图像设置为任何视图的背景(例如 FrameLayout),则显示的图像剪辑取决于该视图的大小。

如果该视图的 layout_width / layout_height 设置为 wrap_content,那么它的大小取决于其子视图的尺寸和排列。在 FrameLayout 的情况下,它取决于 FrameLayout 的单个子项的大小。

如果您使用的是 ImageView,则默认情况下图像将被缩放以适应 ImageView 的大小。ImageView 的大小取决于它的 layout_width / layout_height 值。如果您将这些值设置为 match_parent 并且 ImageView 有足够的“增长”空间,您应该能够看到您的图像在整个屏幕上伸展。

“成长空间”取决于布局中 ImageView 的上下文。它有占用空间的邻居吗?父视图是否太小(例如因为 wrap_content)?寻找这些可能的问题。

于 2012-07-13T16:38:22.420 回答