ImageView的scaleType详解
1. 網(wǎng)上的誤解
不得不說很失望,到網(wǎng)上搜索了幾篇帖子,然后看到的都是相互復(fù)制粘貼,就算不是粘貼的,有幾篇還是只是拿著自己的幾個簡單例子,然后做測試,這種以一種現(xiàn)象結(jié)合自己的猜測便得出結(jié)論,其實只是想由不完全歸納得出完全歸納的結(jié)果,然而很令人失望,原因是: 數(shù)據(jù)取樣過于片面,只是單純的測試了一種情況,導(dǎo)致大家對這些帖子相當(dāng)失望。
2. scaleType存在的形式
1) CENTER
2) CENTER_CROP
3) CENTER_INSIDE
4) FIT_CENTER
5) FIT_END
6) FIT_START
7) FIT_XY
8) MATRIX
3.Google的官方解釋以及我的個人分析?
?
| type | google官方說明 | 我的解釋 |
| CENTER? | Center the image in the view, but perform no scaling.? | 劇中顯示,不做縮放 |
| CENTER_CROP? | Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or larger than the corresponding dimension of the view (minus padding).? | 劇中顯示,等比例縮放,兩邊都大于或等于對示窗口對應(yīng)的那一邊 |
| CENTER_INSIDE? | Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or less than the corresponding dimension of the view (minus padding).? | 劇中顯示,等比例縮放,兩邊都小于或等于顯示窗口對應(yīng)的那一邊 |
| FIT_CENTER? | Scale the image using?CENTER. | 劇中顯示,等比例縮放,兩邊至少有一邊等于顯示窗口對應(yīng)的那一邊,另一邊小于或等于顯示窗口對應(yīng)的那一邊 |
| FIT_END? | Scale the image using?END | 圖片右下角和窗口右下角對其,等比例縮放,兩邊至少有一邊等于顯示窗口對應(yīng)的那一邊,另一邊小于或等于顯示窗口對應(yīng)的那一邊 |
| FIT_START? | Scale the image using?START | 圖片左上角和窗口左上角對其,等比例縮放,兩邊至少有一邊等于顯示窗口對應(yīng)的那一邊,另一邊小于或等于顯示窗口對應(yīng)的那一邊 |
| FIT_XY? | Scale the image using?FILL | 不等比例縮放,x縮放到等于等于顯示窗口對應(yīng)的那一邊,y縮放到等于顯示窗口對應(yīng)的那一邊 |
| MATRIX? | Scale using the image matrix when drawing.? | ?圖片左上角和窗口左上角對其,不做縮放處理 |
為了表明測試的準(zhǔn)確性,我準(zhǔn)備了兩組數(shù)據(jù),一組是圖片的分辨率高于ImageView自身的寬高,另外一組是圖片的分辨率低于ImageView自身的寬高,這樣才具有測試的完整性。
第一組: 圖片的分辨率高于ImageView自身的寬高
原圖: 屏幕截圖: 尺寸:1080*1920 即1080p的屏幕截圖
?
將各組數(shù)據(jù)分別做顯示,為了表示特點,將ImageView的背景設(shè)置為黑色,ImageView的大小設(shè)置為100dp*100dp
?
| 行\列 | 1 | 2 | 3 |
| 1 | center | centerCrop | centerInside |
| 2 | fitCenter | fitEnd | fitXY |
| 3 | fitStart | matrix | ? |
?
咱們逐個開始看
第二組測試數(shù)據(jù): 圖片分辨率小于ImageView大小的各種數(shù)據(jù)?
原圖: 分辨率: 165*220?
ImageView大小: 200dp*200dp?
類型以及結(jié)果:?
? ? ? 2. CENTER_CROP: 同樣: 由于會縮放,圖片高度大于寬度,因而最終的效果是寬度填充滿,而高度上部分顯示不出來??
? ? ? 3. CENTER_INSIDE : 剛才已經(jīng)提到,如果圖片小于屏幕的大小,那么CENTER_INSIDE是不會做縮放的
?
此時可能有人會提出疑問,假如說圖片一側(cè)大于屏幕的大小,而另外一側(cè)小于屏幕的大小,那么會怎么處理呢?處理的方式還是要符合原則,最終的結(jié)果是兩側(cè)都要小于等于屏幕對應(yīng)的尺寸,就是在ImageView的大小內(nèi),顯示完整這個圖片,并且是按照等比例縮放的
,以這個圖片為例:
用Nexus5(分辨率為1080*1920)做測試,假如說ImageView的大小為60dp*60dp,Nexus5下的大小為 : 180px*180px
而圖片的大小 :165px*220px,這時圖片的高度已經(jīng)超過了ImageView的高度,所以會將高度縮放到ImageView的大小,因而出現(xiàn)如下的效果
?
? ? ?4. FIT_CENTER :?
? ? ?5.?FIT_END:
? ? ?6.?FIT_START
? ? ?7. MATRIX
?
總結(jié)
以上是生活随笔為你收集整理的ImageView的scaleType详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript OOP(下)(九)
- 下一篇: Centos 7安装与配置nagios监