Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸

简介: Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸实验方法,先找一张不规则大图,尺寸:1024pix(宽) X  1465pix(高),原图如图:然后特意设置一个ImageView宽高均为600pix。
Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸


实验方法,先找一张不规则大图,尺寸:1024pix(宽) X  1465pix(高),原图如图:




然后特意设置一个ImageView宽高均为600pix。观察不同scaleType配置下,Android对原图的裁剪缩放效果。左侧为代码,右侧为缩放和裁剪效果。
(1)android:scaleType="fitXY"

可见是铺面整个ImageView进行拉伸缩放。不对原图进行裁剪,仅仅缩放。


(2)android:scaleType="center"

这种情况下,要对原图裁剪,以图片中心为基准,以中心向四周出发,裁剪原图刚好为600pix X 600pix放到ImageView里面。


(3)android:scaleType="centerInside"

以图片中心为等比例缩放的基准,这种配置会使图片通过等比例放大或缩小一定落入到ImageView里面,缩放直到原图有一个象限(宽或高)触碰到ImageView的宽高为至,当然前提是整个图必须都得缩放到这个ImageView里面。就像本例一样,Android会对原图等比例缩放,缩放后的高度就是ImageView的高度,而宽度则不够,所以两边留空白(蓝色细线区域内即是)。
如果原图宽大与高,那么本例显示的结果是原图缩放后的宽度和ImageView一样宽,由于高度缩放后不够,那么ImageView的高度(上方,下方)就会出现空白。这样的配置没有裁剪,仅是缩放。

(4)android:scaleType="centerCrop"

这种情况下结合了center和centerInside的特性。centerCrop将对原图进行等比例缩放后裁剪,可以看到原图片的顶部和底部已经被裁剪掉,缩放后的图片宽度和ImageView宽度一直,高度上进行剪除掉。

上面提供的原图是一张宽小于高的图。下面再试一张宽比高大的图,1592pix(宽) X 1080Pix(高),原图:


这次设置四个ImageView宽高均为400pix,代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="400px"
        android:layout_height="400px"
        android:layout_alignParentLeft="true"
        android:background="@android:color/holo_blue_bright"
        android:scaleType="centerInside"
        android:src="@drawable/img" />

    <ImageView
        android:layout_width="400px"
        android:layout_height="400px"
        android:layout_alignParentRight="true"
        android:scaleType="centerCrop"
        android:src="@drawable/img" />

    <ImageView
        android:layout_width="400px"
        android:layout_height="400px"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:scaleType="center"
        android:src="@drawable/img" />

    <ImageView
        android:layout_width="400px"
        android:layout_height="400px"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:scaleType="fitXY"
        android:src="@drawable/img" />
</RelativeLayout>
结果如图:

fitXY,center和centerInside比如容易理解,scaleType中比较重要和比较难以理解的是centerCrop,对比本例中两张宽高不相同的图片等比例缩放效果可以总结出来,centerCrop的裁剪和缩放,是在对原图等比例缩放过程中,宽高两个属性谁先触碰到ImageView的宽高就停止缩放,然后剪除另外一侧。比如在缩放过程中,缩放图的高先等于ImageView的高,那么就剪除宽;如果图的宽在缩放过程中先等于ImageView的宽,那么就剪除高。

现在的App在启动时候,会有一个广告或者称之为启动页的图,闪现而过,作为一个过渡的图画,然后进入App内容。这种情况下,可以利用android:scaleType="centerCrop"属性,但是前提是手机屏幕都是瘦长的屏幕(高比宽大),这样Android会把原图的宽和手机屏幕一样宽,但是高的部分Android对它们裁剪截取掉。所以,设计和UI出的图,也要配合着做成高比宽大的图方可。
相关文章
|
4月前
|
JavaScript Android开发
使用贝叶斯曲线滑动安卓屏幕(autojsPro7)
使用贝叶斯曲线滑动安卓屏幕(autojsPro7)
71 0
|
5月前
|
XML Java Android开发
Android Studio App开发之对图片进行简单加工(包括放缩,旋转等等 附源码)
Android Studio App开发之对图片进行简单加工(包括放缩,旋转等等 附源码)
50 0
|
5月前
|
XML Java Android开发
Android Studio App开发之使用相机拍摄照片和从相册中选取图片(附源码 超详细必看)
Android Studio App开发之使用相机拍摄照片和从相册中选取图片(附源码 超详细必看)
223 0
|
5月前
|
XML Java Android开发
Android Studio App开发之捕获屏幕的变更事件实战(包括竖屏与横屏切换,回到桌面与切换到任务列表)
Android Studio App开发之捕获屏幕的变更事件实战(包括竖屏与横屏切换,回到桌面与切换到任务列表)
45 0
|
2天前
|
Java Android开发
android 下载图片的问题
android 下载图片的问题
11 3
|
3天前
|
Android开发
Android通过手势(多点)缩放和拖拽图片
Android通过手势(多点)缩放和拖拽图片
11 4
|
5天前
|
开发工具 Android开发
rk平台Android12屏幕永不休眠
rk平台Android12屏幕永不休眠
17 1
|
6天前
|
Android开发
Android中Glide加载Https图片失败的解决方案
Android中Glide加载Https图片失败的解决方案
14 1
|
19天前
|
XML Java Android开发
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
Android系统 添加动态控制屏幕方向、强制APP横竖屏方向
34 1
|
5月前
|
XML JSON Java
Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
92 0