(1) 那么adjustViewBounds="ture"是什么意思呢?
當adjustViewBounds="ture"的時候,Adjust the ImageView's bounds to preserve the aspect ration of its drawable。什么意思呢?意思是說通過調(diào)整ImageView的界限來保持圖片的寬高比例。這里的比例是指圖片(真正需要加載的圖片)寬高的比例,而非ImageView比例,簡單來說adjustViewBounds="ture"的時候,圖片的寬高比有可能發(fā)生變化。
(2) 那么接下來我們分析一下,如果設置adjustViewBounds="ture",圖片寬高比到底將會什么變化?
在布局文件XML中設置adjustViewBounds="ture"的時候,會將這個ImageView的scaleType屬性設置為fitCenter,但是如果同時在XML文件中設置android:scaleType,則android:scaleType的優(yōu)先級會更高,adjustViewBounds="ture"中對scaleType屬性設置將會失效。這種情況,只有在Java代碼中設置setAdjustViewBounds(true)的時候,才會生效。
(一)當ImageView的layout_width和layout _height都是固定值的時候。adjustViewBounds="ture"是沒有效果的,因為圖片會按照ImageView的比例被直接填充到ImageView控件中。
(二)當ImageView的layout_ width和layout_ height其中有一個屬性固定值的時候。圖片的寬/高將會與ImageView的layout_ width/layout_ height的固定值進行比較。如果圖片寬/高小,圖片將會以其高/寬來填充ImageView,此時的ImageView的ImageView的layout_ height/layout_ width將與圖片的高/寬相同。如果圖片寬/高大于或者等于,ImageView將與圖片擁有相同的寬高比,也就是說圖片將會以自身的寬高比填充到ImageView。
舉一個簡單的例子:ImageView的layout_ width="100dp",layout_ height="wrap_ content"的時候,圖片的寬度將會與100dp進行對比(拋開單位換算)。A、如果圖片的寬度小于100dp,ImageView的layout_height將與圖片的高相同,即圖片不會縮放,完整顯示在ImageView中,ImageView高度與圖片實際高度相同。圖片沒有占滿ImageView,ImageView中有空白。B、如果圖片的寬度大于或等于100dp,圖片將保持自身寬高比縮放,完整顯示在ImageView中,并且完全占滿ImageView。
(三)當ImageView的layout_ width和layout_ height都是wrap_content的時候。adjustViewBounds是沒有意義的,因為ImageView將始終與圖片擁有相同的寬高比(但是并不是相同的寬高值,通常都會放大一些)。