這篇随筆将會簡單的記錄下imageview這個控件的一些使用方法,以及其最重要的一個屬性: scaletype
imageview這個控件是用來顯示圖檔用的,例如我們可以通過下面這段xml配置來聲明顯示一張圖檔:
其中src就是引用我們需要使用的圖檔,其可以是存放在 assets 目錄下的圖檔,也可以是res/drawable目錄下的圖檔,還可以是網絡上的圖檔。我們這裡是将圖檔放在了 res/drawable這個目錄下,然後通過其自動生成的id來引用這個圖檔,我們同樣可以在java代碼中通過imageview這個對象來設定我們要引用的圖檔
接下來我們來看看imageview中最重要的一個屬性:scaletype,這個屬性是用來控制我們的圖檔怎樣縮擴或者移動來比對我們和imageview本身設定的大小。
其擁有許多的值,我們接下來根據代碼來看看每個值所代表的含義:
①fitcenter:這個值指的是,當我這張圖檔比imageview大的時候,就會按照比例對圖檔進行縮放,并将圖檔居中顯示。如果這張圖檔比imageview小,那麼就會根據比例對圖檔進行擴大,然後将其居中顯示,注意:如果圖檔分辨率不是兩個相等的值,例如480*320,那麼因為縮放比例不同,fitcenter設定後,其會根據小的分辨率進行縮小,例如會根據320來進行縮放或者擴大
我們看到,這裡引用了兩張圖檔,第一張dog圖檔是比imageview大的,第二張ic_launcher是比imageview小的,我們設定其scaletype後,其顯示效果如下:
我們看到,因為第一張圖檔分辨率不是兩個相等的數,那麼就會留出一些邊出來
②fitstart、fitend屬性:這個屬性跟fitcenter類似,當圖檔大小與imageview不相等時,其會按照比例對圖檔進行縮小或者放大,其參考的方向是根據分辨率大的那一方,例如480*320,則會參考480那方作為上下,如果是fitstart,則會将圖檔上邊跟imageview對其,fitend則會将圖檔下邊與imageview對其
我們看到,其會根據480那個分辨率向上對其,如果設定成fitstart,反之,設定成fitend,則會向下對其
③center:如果設定成center的話,那麼圖檔就會截取中間的那部分顯示在imageview裡面,不會對圖檔進行縮小或者放大
④centerinside:設定這個屬性值後,如果圖檔的大小比imageview大,那麼就根據比例對圖檔進行縮小并将其居中顯示,如果圖檔比imageview小,那麼則不會對圖檔進行擴大處理,而是直接對其進行居中顯示:
⑤centercrop:如果圖檔比imageview大,那麼則會對其進行縮小,但是并不會像fitcenter或者centerinside那樣是根據比例縮放,centercrop設定後,其縮放的時候會将整個imageview的邊都占據滿,不會留出空隙,然後再将圖檔居中顯示,如果圖檔小的話,就會對其進行擴大,并占滿imageview的邊框,再居中顯示:
我們同樣可以在java代碼中來設定scaletype這個屬性:
這幾個就是我們常用的幾個scaletype屬性,我們可以根據需要來設定不同的屬性值來達到圖檔和imageview大小比對的效果