ImageView的scaleType知識總結

ghynwxdl 7年前發布 | 6K 次閱讀 安卓開發 Android開發 移動開發

ImageView的ScaleType決定了圖片在View上的顯示的樣式,比如如何對圖片進行縮放,顯示圖片整體還是部分,還是根據自己的需求進行相關顯示。設置比較簡單:

xml中如下定義:

android:scaleType="center"

或者代碼中如下定義:

imageView.setScaleType(ImageView.ScaleType.CENTER);

首先我們先來看下我們最終需要的結果:

我們這里就以一個實例來看下顯示的圖片大小吧。

首先,我們先來一個真圖(默認顯示的),圖片地址如下:

http://photos.breadtrip.com/photo_2012_06_26_b10dafad432167233c86774c0bc8bc3b.jpg?imageView/2/w/960/q/85

這個圖片的大小是720*960分辨率的。(而且后臺給定的還不是固定的圖片大小)

當然這個時候我們在app中使用的時候,是不會這么原圖大小進行顯示的,而是根據我們的imageView的寬和高進行適當的匹配。

比如如下定義:

我們定義以下的樣式(用到了cardview)
  <style name="Card_bg">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">120dp</item>
        <item name="android:layout_marginBottom">4dp</item>
        <item name="cardBackgroundColor">@color/white</item>
        <item name="cardCornerRadius">4dp</item>
        <item name="cardElevation">2dp</item>
    </style>


    <style name="CardPhoto">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:tint">@color/photo_tint</item>
        <item name="android:scaleType">centerCrop</item>
        <item name="riv_corner_radius">6dp</item>
    </style>

這里我在這里用到了一個開源庫,用于圓角圖片形成,地址如下:

compile 'com.makeramen:roundedimageview:1.5.0'

這個時候我們在xml中如下使用:

<android.support.v7.widget.CardView
        android:id="@+id/card_view"
        style="@style/Card_bg"
        >
        <include
            layout="@layout/card_photo"/>
 </android.support.v7.widget.CardView>

其中card_photo布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<com.makeramen.RoundedImageView xmlns:android="http://schemas.android.com/apk/res/android"
                                android:id="@+id/photo"
              style="@style/CardPhoto">

</com.makeramen.RoundedImageView>

以上并不是重點(以上只是為了實現我們上圖的效果,個人感覺還是蠻好看的),重點是scaleType,哈哈,來讓我們開始吧。

我們雖然定義了ImageView的寬匹配父窗體,高是120dp。我們先來看下scaleType不設置的時候什么樣子。

1、默認不適用scaleType效果

可以看大如果什么都沒有,就是原版的縮放(這里高有了限定,那么就按照高的比例進行縮放)

2、ImageView.ScaleType.CENTER效果

android:scaleType="center"

可以看到center的效果和我們需要的效果基本接近了,但是細心的看的出來,還是有區別的,那就是會按照圖片原來的size居中顯示, 如果圖片的長/寬 超過了view的長/寬,則截取圖片的居中部分 ,這也就是為什么我們看到的是圖片的居中顯示部分

3、ImageView.ScaleType.CENTER_CROP效果

android:scaleType="centerCrop"

可以看到這個效果是最終我們需要的效果,按比例擴大(或者縮小)圖片的size居中顯示,使得圖片的長(寬)等于或者大于或者小于view的長(寬)

4、ImageView.ScaleType.CENTER_INSIDE效果

android:scaleType="centerInside"

將圖片的內容完整居中顯示,通過安裝長或者寬的縮小或放大的比例(這里按照了高的進行了縮放)使得圖片的長/寬等于或者小于view的長/寬

5、ImageView.ScaleType.FIT_CENTER效果

android:scaleType="fitCenter"

把圖片按照比例擴大或者縮小,居中顯示

6、ImageView.ScaleType.FITSTART、FITEND效果

android:scaleType="fitStart"
 android:scaleType="fitEnd"

這兩個效果和fitCenter的效果差不多,只是顯示的位置不同,圖片上有了顯示位置對應的模式,這里就不多說了。

7、ImageView.ScaleType.FITXY

android:scaleType="fitXY"

不按照比例進行擴展或者縮放,目的是鋪滿整個view(這里明顯的可以看到圖片被拉伸了)

至此,應該知道了關于ImageView的scaleType屬性是怎么一回事,并且在以后的項目中也知道了怎么使用了吧。也算是自己的一個總結。

 

 

來自:http://www.jianshu.com/p/feba178588e1

 

 本文由用戶 ghynwxdl 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!