问题描述
让我们说我有一个大图像,例如2000x3000px,并想裁剪出1080x1920px的图像并将其作为我的应用程序的背景。我发现,每一个具有412x732视口的设备都可以正确显示此图像(高度和宽度的拉伸没有不同的因素)。宽高比将相同,因此在1440x2560px(视口412x732)设备上保持相同宽度时,1080x1920图像的对象看起来不会在高度上拉伸。但是,当在1080x2280px设备(视口412x869)上显示此图像时,该图像将看起来被拉伸(就像您在右图中看到的一样)。现在,我想知道如何为不同的宽高比实现背景图像,以使这种拉伸不会在任何设备上发生。取而代之的是,我希望原始大图像的更多部分显示在具有更大(或较小图像)长宽比设备的屏幕上。 想象一下,图像的黑色边框是原始的2000x3000px,蓝色边框是1080x1920设备上的图像,绿色边框是1080x2280设备。我希望你明白我的意思。
经过一些研究,我发现可以将ImageView与android:scaleType="centerCrop"
一起使用,而不是将图像作为背景。但是我不知道这是否可以解决我的问题。你们认为什么是解决此问题的最佳方法?
解决方法
使用android:scaleType="centerCrop"
时,您还应该在每个屏幕上放置ImageView
。如果只有一个屏幕,这会很好,否则,您将需要重复相同的技巧。
如果需要将窗口的相同背景设置为主题属性,则可以使用可绘制资源包装图像。像这样:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@color/bg_image"/>
<item>
<bitmap
android:gravity="center|bottom|clip_vertical"
android:src="@drawable/your_image" />
</item>
</layer-list>
在重力作用下,您可以通过缩放/定位获得首选结果。
要将图像设置为主题属性,您需要以AppTheme
样式添加它:
<item name="android:windowBackground">@drawable/you_image_as_a_layer_list</item>