本文來(lái)至:ifangler.com.
一直對(duì)ImageView的ScaleType的幾個(gè)選項(xiàng)有點(diǎn)陌生,網(wǎng)上的資料也沒(méi)能讓我清楚的知道在什么場(chǎng)景應(yīng)該選擇ScaleType的哪個(gè)選項(xiàng)劲厌,于是自己用例子來(lái)實(shí)驗(yàn)了一把掀潮。
開始之前:下面會(huì)有圖來(lái)說(shuō)明這幾個(gè)選項(xiàng)的區(qū)別米辐,每張圖片會(huì)比較默認(rèn)的ScaleType和相應(yīng)的ScaleType選項(xiàng)洪己。其中圖片的黑色框框是ImageView的顯示邊界洽故。
FIT_CENTER
將圖片按比例擴(kuò)大/縮放到ImageView的寬高届良,居中顯示笆凌。
我的理解:將圖片按比例縮放(擴(kuò)大)直到圖片的寬或高與ImageView的寬高相等,然后居中顯示士葫。
這是ImageView的默認(rèn)處理方式
FIT_XY
不按比例縮放圖片菩颖,目標(biāo)是把圖片塞滿整個(gè)View。
我的理解:將圖片縮放/擴(kuò)大直到與ImageView的寬高相等为障,由于沒(méi)有按比例縮放晦闰,所以會(huì)存在寬或高出現(xiàn)拉伸至相同高度。
有圖有真相:
FIT_START
FIT_START, FIT_END在圖片縮放效果上與FIT_CENTER一樣鳍怨,只是顯示的位置不同呻右。
FIT_END
同上。
我的理解:上面兩個(gè)屬性與FIT_CENTER的縮放方式是一樣的鞋喇,只是最后顯示的位置不一樣声滥,F(xiàn)IT_CENTER是居中顯示,F(xiàn)IT_START是顯示在START的位置侦香,F(xiàn)IT_END是顯示在END的位置落塑。
關(guān)于START和END的位置:
- 如果圖片縮放到與ImageView等寬,那么START在頂部罐韩,END在底部憾赁。
- 如果圖片縮放到與ImageView等高,那么START在左邊散吵,END在右邊龙考。
圖片如下:
FIT_START效果
FIT_END效果
CENTER
按圖片的原來(lái)size居中顯示蟆肆,當(dāng)圖片寬/高超過(guò)ImageView的寬/高,則截取圖片的居中部分顯示晦款。
我的理解:這個(gè)是不會(huì)改變圖片大小的炎功,將圖片顯示在ImageView中,如果圖片寬高超過(guò)ImageView的寬高缓溅,則將超出的部分裁切到顯示蛇损。如果圖片未超過(guò)ImageView大小,則顯示原圖坛怪。
效果如下:
圖片較小的情況
圖片超過(guò)ImageView大小的情況
CENTER_CROP
按比例擴(kuò)大圖片的size居中顯示淤齐,使得圖片寬/高等于或大于ImageView的寬/高
我的理解:這個(gè)會(huì)按比例拉伸圖片直到圖片的寬高都大于或等于ImageView的寬高,多余的部分被裁切掉酝陈。
效果如下:
CENTER_INSIDE
將圖片的內(nèi)容完整居中顯示,通過(guò)按比例縮小或原來(lái)的size使得圖片寬/高等于或小于ImageView的寬/高
我的理解:這個(gè)和CENTER_CROP的處理方式類似毁涉,只是它會(huì)按比例拉伸圖片直到圖片的寬高都小于或等于ImageView的寬高沉帮。
需要注意的是:如果圖片的寬高都小于ImageView的寬高時(shí),顯示的是原圖贫堰。
效果如下:
圖片超過(guò)ImageView大小的情況
圖片較小的情況
這下就清楚多了~~
最后附上源碼地址:https://github.com/fangler/AndroidDemos/tree/master/ImageScaleDemo