Xamarin

Android ImageView.ScaleType

張蔚廷 2018/05/31 10:54:23
642

Android ImageView.ScaleType


簡介

Android ImageView.ScaleType 深入了解,解決Android常見的版面調整問題

作者

張蔚廷


前言

Android開發時常會需要使用圖片,而使用圖片則不得不面對Android多重螢幕支援的問題,以下詳細列出Android官方提供的ScaleType(縮放類型)以了解實務上如何解決這些問題。
注意:在使用ScaleType時必須將圖片設為src而非background,否則ScaleType無法運作
下圖為範例圖預覽,兩個長方形的色塊為ImageView,當前沒有放任何圖片。
下面兩張圖為等等要用到的圖片原圖,對本文來說相對重要。
大圖會固定放在較上面的ImageView
 
 
 

Center

 
如下圖,Center會將圖案放在ImageView中央,但是不執行任何縮放,因此,若ImageView的大小過小會導致切掉額外的圖片,若ImageView的大小過大會導致嚴重留白,在實務上比較少使用這個ScaleType。

CENTER_CROP

Center Crop會按照等比例縮放原圖,然後將圖片比例相對較短的邊塞滿ImageView,也因為如此,可以保證ImageView是被圖片充滿的,而多餘的圖片則會被切除,在實務上這是一個常用的ScaleType,優點在於有些圖片的中央部分是比較重要的(或者設計圖片時就有考慮到這點),邊緣被切除還可以接受,而保持了填滿ImageView的穩定性。

CENTER_INSIDE

如果圖片超出ImageView大小則按照等比例縮放原圖,然後將圖片比例相對較長的邊塞滿ImageView,如果圖片長寬都小於ImageView,則簡單置中,也因為如此,可以保證整張圖片一定被完整的顯示,而沒法填滿的Imageview部分則會留白,實務上相當常見,適合用於無論如何都一定要顯示完整圖片的狀況,通常會故意使用更大的圖片以避免過度留白。

FIT_CENTER

跟Center Inside比較起來,差別在於過小的圖片會強制拉大,這是一個常見的配置,因為減少了留白的程度,缺點在於可能過度的拉大小張的圖片,在經過詳細設計的狀況下可能是更好的選擇。

FIT_END

 除了置中變成置尾,其他都等於Fit Center,很少用到這個。

FIT_START

 除了置中變成置前,其他都等於Fit Center,很少用到這個。

FIT_XY

 fitXY會強制塞滿整個ImageView,由於Android的螢幕長寬比實在太多樣化了,容易在少數機型產生奇怪的效果,很少會有機會使用這個Scale Type。

MATRIX

 Matrix會將原圖貼齊左上角,並且用原圖大小塞進去ImageView,不做任何修改,如果原圖長或者寬大於ImageView,則直接切除,考慮到支援手機跟平板的可能性,即使能夠進行多種dpi的配置,也不是很適合使用這個Scale Type,同樣很少使用。

結語

以上範例呈現了官方所有的Scale Type的實際畫面,然而我們在開發時,面對Android螢幕縮放的問題,並非先想到Scale Type,而是應該先從需求面談起,了解使用者可以接受該張圖片裁切/變形/縮放的程度以及需要配置的機型,並在兩者不能得兼的情況下做出選擇,最後才是藉由需求的結果挑選使用的Scale Type以及ImageView的大小。
 
張蔚廷