为什么我的720像素图像在我的720像素星系S3中出现失真

时间:2012-07-13 14:58:34

标签: android android-image

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

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

我真正的问题:

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

将这些不同版本放入各自的可绘制文件夹(res / drawable-ldpi,res / drawable-mdpi ...)。

表示,同一个位图的这些不同版本当然必须具有相同的文件名,否则无效。

其次,您不应对设备屏幕高度和宽度做出强有力的假设。您需要布置视图和图形,以便动态地使用整个屏幕而不知道确切的屏幕分辨率。但是,您可以根据configuration qualifiers

对这些屏幕分辨率做出弱假设
  • 正常
  • XLARGE

根据任何假设尝试避免视图的固定大小。始终避免布局XML文件中的“px”值。请改用“dip”。

阅读文档Supporting Multiple Screens以获取更多信息。

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

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

如果该视图将layout_width / layout_height设置为wrap_content,则其大小取决于其子视图的维度和排列。 在FrameLayout的情况下,它取决于FrameLayout的单个子节点的大小。

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

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