1. 程式人生 > >通過scaleType裁剪大發888源碼下載縮放圖片適配不同屏幕不同

通過scaleType裁剪大發888源碼下載縮放圖片適配不同屏幕不同

伸縮 屏幕 ntb 手機 放大 重要 height 區域 XML

後特意大發888源碼下載論壇:haozbbs.com Q1446595067設置一個ImageView寬高均為600pix。觀察不同scaleType配置下,Android對原圖的裁剪縮放效果。左側為代碼,右側為縮放和裁剪效果。
(1)android:scaleType="fitXY"

可見是鋪面整個ImageView進行拉伸縮放。不對原圖進行裁剪,僅僅縮放。

(2)android:scaleType="center"

這種情況下,要對原圖裁剪,以圖片中心為基準,以中心向四周出發,裁剪原圖剛好為600pix X 600pix放到ImageView裏面。

(3)android:scaleType="centerInside"

以圖片中心為等比例縮放的基準,這種配置會使圖片通過等比例放大或縮小一定落入到ImageView裏面,縮放直到原圖有一個象限(寬或高)觸碰到ImageView的寬高為至,當然前提是整個圖必須都得縮放到這個ImageView裏面。就像本例一樣,Android會對原圖等比例縮放,縮放後的高度就是ImageView的高度,而寬度則不夠,所以兩邊留空白(藍色細線區域內即是)。
如果原圖寬大與高,那麽本例顯示的結果是原圖縮放後的寬度和ImageView一樣寬,由於高度縮放後不夠,那麽ImageView的高度(上方,下方)就會出現空白。這樣的配置沒有裁剪,僅是縮放。

(4)android:scaleType="centerCrop"

這種情況下結合了center和centerInside的特性。centerCrop將對原圖進行等比例縮放後裁剪,可以看到原圖片的頂部和底部已經被裁剪掉,縮放後的圖片寬度和ImageView寬度一直,高度上進行剪除掉。

上面提供的原圖是一張寬小於高的圖。下面再試一張寬比高大的圖,1592pix(寬) X 1080Pix(高),原圖:

這次設置四個ImageView寬高均為400pix,代碼:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:layout_width="400px"
    android:layout_height="400px"
    android:layout_alignParentLeft="true"
    android:background="@android:color/holo_blue_bright"
    android:scaleType="centerInside"
    android:src="@drawable/img" />

<ImageView
    android:layout_width="400px"
    android:layout_height="400px"
    android:layout_alignParentRight="true"
    android:scaleType="centerCrop"
    android:src="@drawable/img" />

<ImageView
    android:layout_width="400px"
    android:layout_height="400px"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:scaleType="center"
    android:src="@drawable/img" />

<ImageView
    android:layout_width="400px"
    android:layout_height="400px"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:scaleType="fitXY"
    android:src="@drawable/img" />

</RelativeLayout>

結果如圖:

fitXY,center和centerInside比如容易理解,scaleType中比較重要和比較難以理解的是centerCrop,對比本例中兩張寬高不相同的圖片等比例縮放效果可以總結出來,centerCrop的裁剪和縮放,是在對原圖等比例縮放過程中,寬高兩個屬性誰先觸碰到ImageView的寬高就停止縮放,然後剪除另外一側。比如在縮放過程中,縮放圖的高先等於ImageView的高,那麽就剪除寬;如果圖的寬在縮放過程中先等於ImageView的寬,那麽就剪除高。

現在的App在啟動時候,會有一個廣告或者稱之為啟動頁的圖,閃現而過,作為一個過渡的圖畫,然後進入App內容。這種情況下,可以利用android:scaleType="centerCrop"屬性,但是前提是手機屏幕都是瘦長的屏幕(高比寬大),這樣Android會把原圖的寬和手機屏幕一樣寬,但是高的部分Android對它們裁剪截取掉。所以,設計和UI出的圖,也要配合著做成高比寬大的圖方可。

通過scaleType裁剪大發888源碼下載縮放圖片適配不同屏幕不同