ImageView的Scaletype決定了圖檔在View上顯示時的樣子,如進行何種比例的縮放,及顯示圖檔的整體還是部分,等等。
設定的方式包括:
1. 在layout xml中定義android:scaleType="CENTER"
2. 或在代碼中調用imageView.setScaleType(ImageView.ScaleType.CENTER);
接下來,将對ScaleType的值和對應的顯示效果用最直覺的方式——真圖示範的方法,來進行說明。
下面附上效果圖:
原圖為Pocoyo的頭像,上圖為原圖的size大于ImageView的size,下圖為原圖的size小于ImageView的size
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yNyMjYhZWY0gzYwcTZwMWMyQjY1I2YkJmMlRGZxIjN58CXxAzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
android:adjustViewBounds
ImageView的android:adjustViewBounds屬性為是否保持原圖的長寬比,單獨設定不起作用,需要配合maxWidth或maxHeight一起使用。
[java] view plain copy
- <ImageView
- android:id="@+id/imageView1"
- android:layout_width="fill_parent"
- android:layout_height="200dip"
- android:adjustViewBounds="false"
- android:scaleType="centerInside"//此處每次更改
- android:src="@drawable/ic_3" />//此處兩幅圖間更改,一副圖的大小較小,另一幅的較大。
- <ImageView
- android:id="@+id/imageView2"
- android:adjustViewBounds="true"
- android:src="@drawable/ic_3" />//此處兩幅圖間更改,一副圖的大小較小,另一幅的較大。
(代碼為了證明,adjustViewBonds單獨設定無影響。)
- - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
依本人之見,scaletype的種類分為三類matrix(預設)、fit-X類、和center類。
matrix就不多說。
fit-X類中,
fitStart、fitCenter和fitEnd之間的都是根據需要使原圖改變對ImgView進行适應,按matrix進行繪制,但它們
的差別在于基準不同。fitStart的基準為最上角的點(即matrix方式開始的點)fitCenter的基準點為中間的點
(matrix方式中可以使圖檔居中的點),而fitEnd的基準點為右下角的點(即matrix方式最後繪制點)。
fit-類與下文有出入,實際用到時驗證。
center類
中,center、centerCrop、centerInside都是以原圖的幾何中心點和ImagView的幾何中心點為基準,且隻繪制
ImagView大小的圖像,不同的是是否保持原圖大小和繪圖的目标不同、采取的手段不同。
android:scaleType="center"
保持原圖的大小,顯示在ImageView的中心。當原圖的size大于ImageView的size,超過部分裁剪處理。
android:scaleType="centerCrop"
以填滿整個ImageView為目的,将原圖的中心對準ImageView的中心,等比例放大原圖,直到填滿ImageView為止(指的是ImageView的寬和高都要填滿),原圖超過ImageView的部分作裁剪處理。
android:scaleType="centerInside"
以原圖完全顯示為目的,将圖檔的内容完整居中顯示,通過按比例縮小原圖的size寬(高)等于或小于ImageView的寬(高)。如果原圖的size本身就小于ImageView的size,則原圖的size不作任何處理,居中顯示在ImageView。
android:scaleType="matrix"
不改變原圖的大小,從ImageView的左上角開始繪制原圖,原圖超過ImageView的部分作裁剪處理。
android:scaleType="fitCenter"
把原圖按比例擴大或縮小到ImageView的ImageView的高度,居中顯示
android:scaleType="fitEnd"
android:scaleType="fitStart"
android:scaleType="fitXY"