ImageView src 屬性
ImageView 有一個(gè) Drawable 類型的成員變量 mDrawable 就是 ImageView 顯示的 Drawable淮逊,設(shè)置 mDrawable 有兩種方式:
- xml 文件中設(shè)置
android:src
屬性
屬性值的格式為 reference 或者 color腌且,這個(gè) reference 可以是 drawable 目錄中的圖片,也可以是 drawable 目錄下的 xml 文件结借,還可以是 values/color 中定義的顏色际邻; - 在代碼中通過 setImageXXX 方法胯究,其中比較常用的是
public void setImageDrawable(@Nullable Drawable drawable)
public void setImageBitmap(Bitmap bm)
第一個(gè)方法參數(shù)是一個(gè) Drawable 對象蚊伞,第二個(gè)方法參數(shù)是一個(gè) Bitmap 對象,在方法內(nèi)部也是創(chuàng)建了 BitmapDrawable 對象賦值給成員變量 mDrawable援雇;
- 獲取 ImageView 的內(nèi)容只有一個(gè)方法矛渴,返回的是成員變量 mDrawable,因?yàn)樗械?set 方法最終都是賦值給 mDrawable:
public Drawable getDrawable()
ImageView scaleType 屬性
當(dāng) Drawable 作為 View 背景時(shí)自動拉伸至控件大小,當(dāng)作為 ImageView 的內(nèi)容顯示時(shí)具温,通過 android:scaleType
屬性控制 Drawable 的顯示蚕涤,當(dāng)然也對外提供了設(shè)置 scaleType 的方法,
public void setScaleType(ScaleType scaleType)
ScaleType 的取值為
ScaleType 類型大致可分為三類:
- 以 FIT_開頭铣猩,它們的共同點(diǎn)是會對圖片進(jìn)行縮放
- ScaleType.FIT_CENTER:這種顯示方式是 ImageView 默認(rèn)的顯示方式揖铜,該模式下,圖片會被等比縮放至能夠圖片內(nèi)容完全顯示且寬或高填充控件达皿,并居中顯示天吓,如果圖片寬高比大于控件寬高比,則控件上下留白峦椰,如果圖片寬高比小于控件寬高比龄寞,控件左右留白;
- ScaleType.FIT_START :該模式下汤功,圖片會被等比縮放至能夠圖片內(nèi)容完全顯示且寬或高填充控件物邑,并且在上邊或者左邊顯示,如果圖片寬高比大于控件寬高比滔金,則圖片靠上顯示拂封,控件下邊留白,如果圖片寬高比小于控件寬高比鹦蠕,圖片靠左顯示,右邊留白在抛;
- ScaleType.FIT_END:該模式下钟病,圖片會被等比縮放至能夠圖片內(nèi)容完全顯示且寬或高能夠填充控件,并且在下邊或右邊顯示刚梭,如果圖片寬高比大于控件寬高比肠阱,則圖片靠下顯示,上邊留白朴读,如果圖片寬高比小于控件寬高比屹徘,則圖片靠右顯示,左邊留白衅金;
- ScaleType.FIT_XY:該模式下噪伊,圖片內(nèi)容完全顯示且圖片會被縮放至寬和高均填充控件;
- 以 CENTER_ 開頭氮唯,它們的共同點(diǎn)是圖片居中顯示鉴吹,圖片的中心點(diǎn)和 ImageView 的中心點(diǎn)重合
- ScaleType.CENTER:該模式下,不對圖片進(jìn)行縮放惩琉,如果圖片大于控件豆励,則顯示圖片中間部分,超出控件的部分不顯示,如果圖片小于控件瞒渠,則圖片居中顯示良蒸;
- ScaleType.CENTER_CROP:該模式下技扼,圖片會被等比縮放至控件的寬和高均被填充,如果圖片寬高比大于控件寬高比嫩痰,那么圖片高度像素可以完全顯示剿吻,寬度像素超出控件的部分不顯示,如果圖片寬高比小于控件寬高比始赎,那么圖片寬度像素可以完全顯示和橙,高度像素超出控件的部分不顯示;
- ScaleType.CENTER_INSIDE:該模式下,圖片內(nèi)容完全顯示副瀑,如果圖片大于控件砂碉,則圖片等比縮放,填充控件寬或高办斑,效果同 ScaleType.FIT_CENTER 模式,如果圖片小于控件杆逗,則圖片居中顯示乡翅,效果同 ScaleType.CENTER 模式,
- ScaleType.MATRIX
該模式需要與ImageView.setImageMatrix(Matrix matrix)
配合使用罪郊,因?yàn)樵撃J叫枰糜谥付ㄒ粋€(gè)變換矩陣用于指定圖片如何展示蠕蚜。
在不作矩陣變換的情況下,從控件的左上角開始悔橄,不縮放圖片靶累,與CENTER相似,不同點(diǎn)在于把圖片的左上角對上控件的左上角顯示癣疟,超出控件的部分不顯示挣柬。
在使用時(shí),需要先調(diào)用setScaleType
方法睛挚,再調(diào)用setImageMatrix
方法
下面給出一個(gè)使用示例:
imageView.setScaleType(ImageView.ScaleType.MATRIX); //設(shè)置為矩陣模式
Matrix matrix = new Matrix(); //創(chuàng)建一個(gè)單位矩陣
matrix.setTranslate(100, 100); //平移x和y各100單位
matrix.preRotate(30); //順時(shí)針旋轉(zhuǎn)30度
imageView.setImageMatrix(matrix); //設(shè)置并應(yīng)用矩陣
因?yàn)楸容^混亂邪蛔,再稍微總結(jié)一下:
從縮放角度來說:
- 等比縮放:FIT_CCENTER、FIT_START扎狱、FIT_END侧到、CENTER_CROP、
- 不等比縮放:FIT_XY
- 不縮放:CENTER委乌、MATRIX
- 圖片大于控件時(shí)縮床牧,小于控件時(shí)不放:CENTER_INSIDE
從圖片內(nèi)容顯示角度來說:
- 圖片內(nèi)容完全顯示:FIT_CENTER、FIT_START遭贸、FIT_END戈咳、FIT_XY、CENTER_INSIDE
- 圖片大于控件時(shí)圖片內(nèi)容不完全顯示:CENTER、CENTER_CROP著蛙、MATRIX
從控件填充角度來說:
- 不會留白的:FIT_XY删铃、CENTER_CROP
- 會留白的:FIT_CENTER、FIT_START踏堡、FIT_END猎唁、CENTER、CENTER_INSIDE顷蟆、MATRIX