如何在不同设备上保持原始图像视图比率?

时间:2015-07-19 00:47:40

标签: android

针对一台设备进行了优化后,图片视图以布局中定义的正确比例显示。但是,如何更进一步,使各种图像视图在不同的设备上扩展?

android:layout_width="fill_parent"
android:layout_height="fill_parent"

尝试在半相关问题中提出一些建议:

android:adjustViewBounds="true"

那没有改变任何事情。

其他详情:

       android:layout_width="100dp"
       android:layout_height="100dp"

已定义图像视图的宽度和高度。这是什么阻止设备根据可用的屏幕空间缩放各种图像视图?

2 个答案:

答案 0 :(得分:1)

欢迎来到这件痛苦的事! :)

<强>基本上

如果你可以控制你的图像大小(你使用的资源的情况,如drawables,资产或预定义大小的图像)你只需要做一些微积分来保证你的ImageView具有适合的大小你的图像在不同的屏幕上。

该框架已在Runtime为这类内容提供API,但您甚至不需要在代码中执行此操作。通常在与UI设计人员合作时,他们会(应该)向您提供复杂视图的所有屏幕密度和UI元素的度量规格,或者至少是基本密度(MDPI)之后的规格,因此您可以自己计算其余部分。无论哪种方式,您都可以使用values/dimens来获取这些值,并相应地使用它。正如您已经看到的那样,使用scaleType=fitXYadjustViewBounds=true,您很高兴。很多参考文献:

当您无法控制图像尺寸时

当您无法控制需要显示的图像大小时(例如,当它上传到没有大小规则的某个地方时),您可以采用多种方法来尝试将宽高比保持在{{1 }}。你可以寻找这个并使用似乎最能为你服务的东西。最近,我一直在使用Picasso作为我的图像加载器并找到了一种方法,而不是为了调整图像大小(尽管Picasso在需要时调整图像大小),但是以一种非常简单和优雅的方法绕过这种情况:

Runtime

这会产生这种行为,就像WhatsApp:

enter image description here 无论 Picasso.with(context).load("image_url").fit().centerCrop().into(imageView); 的大小如何,图像都不会失真并显示主要部分(中心)。当然,您仍应根据当前的屏幕尺寸和密度使用正确的视图大小,以确保获得最佳体验。

答案 1 :(得分:1)

您必须查看ScaleType http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

实施例

android:scaleType="center"

android:scaleType="fitCenter"

fitXYfitStart等。您可以看到适合您的内容。