眾所周知,當我們做網絡請求的時候遇到的圖片尺寸往往是不固定的,圖片的分辨率也是各式各樣的,但是往往我們的UI控件尺寸又是固定的,那么我們如何來更好的讓圖片去自適應我們的ImageView控件呢,讓ScaleType這個API幫我們解決這個問題。

首先這是原圖,分辨率很高,圖片很大,另一張圖我們選擇系統(tǒng)自帶的ic_launcher
我們將控件大小設定為寬高300dp的正方形,來看下沒有任何屬性附加時候的顯示效果,灰色背景為ImageView的填充顏色。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<!--大圖-->
<ImageView
android:layout_width="150dp"
android:layout_height="300dp"
android:background="@android:color/darker_gray"
android:contentDescription="@string/app_name"
android:src="@drawable/image_demo" />
<!--系統(tǒng)自帶的圖標-->
<ImageView
android:layout_width="150dp"
android:layout_height="300dp"
android:layout_marginStart="20dp"
android:background="@android:color/darker_gray"
android:contentDescription="@string/app_name"
android:src="@mipmap/ic_launcher" />
</LinearLayout>

未加任何屬性的時候圖片居中顯示
下面我們看一下加入ScaleType屬性時候的效果吧
1.首先android:scaleType="fitCenter"屬性為默認屬性,保持圖片比例拉伸圖片,所以和不加時候沒有任何區(qū)別
2.android:scaleType="fitStart"屬性為保持原圖比例的同時,保持圖片比例拉伸圖片將圖片展示為空白方向的上方或左側

android:scaleType="fitStart"
3.android:scaleType="fitEnd"屬性為保持原圖比例的同時,保持圖片比例拉伸圖片將圖片展示為空白方向的下方或右側

android:scaleType="fitEnd"
-
android:scaleType="matrix"為不改變原圖大小從左上角開始展示圖片,大圖會將多出部分裁剪
android:scaleType="matrix"在大分辨率圖片效果下效果很不理想,小圖在左上角展示 -
android:scaleType="center"屬性為不改變原圖大小的同時將圖片居中展示,大圖會將多出部分裁剪
android:scaleType="center"同樣在大分辨率圖片效果下效果很不理想,小圖居中展示 -
android:scaleType="centerInside"屬性為保持原圖大小的同時將圖片居中展示
android:scaleType="centerInside"大圖下和默認情況下一樣,小圖則居中展示 -
android:scaleType="fitXY" 屬性很直觀直接將圖片拉伸到占滿控件
android:scaleType="fitXY"如果圖片比例和控件尺寸相仿效果還不錯,但是當尺寸比例相差甚遠的時候效果就有點差強人意了
8.android:scaleType="centerCrop"屬性為按比例拉伸后撐滿控件后居中展示,裁剪掉多余部分,這種效果不錯,但是遇到圖片核心內容不是居中的就不太好了

android:scaleType="centerCrop"大圖和小圖效果都還不錯,這也是我平時用的比較多的屬性



