Author:ProZoom
Hobby:愛折騰硼控、愛思考,想靜靜的ProZoom
Github --- 簡書 --- CSDN --- 關于我
Android有很多種drawable/mipmap類型,在以前动壤,工程目錄里只有drawable,現(xiàn)在用Android Studio開發(fā)的還有mipmap目錄淮逻,其實琼懊,兩者都可以添加圖片,不過經常是建議mipmap放圖片資源爬早,drawable放xmlz資源哼丈,本篇文章將匯總介紹drawable資源。
普通圖片
圖片是最常用的mipmap資源筛严,格式包括:png(推薦)醉旦、jpg(可接受)、gif(不建議)。用圖片資源需要根據(jù)不同屏幕密度提供多張不同尺寸的圖片车胡,它們的關系如下表:
密度分類 | 密度值范圍 | 代表分辨率 | 圖標尺寸 | 圖片比例 |
---|---|---|---|---|
mdpi | 120~160dpi | 320x480px | 48x48px | 1 |
hdpi | 160~240dpi | 480x800px | 72x72px | 1.5 |
xhdpi | 240~320dpi | 720x1280px | 96x96px | 2 |
xxhdpi | 320~480dpi | 1080x1920px | 144x144px | 3 |
xxxhdpi | 480~640dpi | 1440x2560px | 192x192px | 4 |
本來還有一個ldpi的檬输,但現(xiàn)在這種小屏幕的設備基本滅絕了,所以不需要再考慮適配匈棘。如上表所示丧慈,一套圖片一般需要提供5張不同比例的圖片。還好有切圖工具羹饰,可以讓切圖變得簡單伊滋,這里推薦兩款:Cutterman和Cut&Slice me,都是Photoshop下的插件队秩,輸出支持android笑旺、ios和web三種平臺。
使用切圖工具雖然方便了馍资,但還是無法避免一套圖片需要提供多張不同尺寸的圖片筒主,這會加大安裝包的大小。另外鸟蟹,需要對圖片做改動時乌妙,比如換個顏色,必須更換所有尺寸圖片建钥。所以藤韵,建議盡量減少引入圖片,而通過使用shape熊经、layer-list等自己畫泽艘,易于修改和維護,也減少了安裝包大小镐依,適配性也更好匹涮。
bitmap標簽
可以通過bitmap標簽對圖片做一些設置,如平鋪槐壳、拉伸或保持圖片原始大小然低,也可以指定對齊方式∥裉疲看看bitmap標簽的一些屬性吧:
- android:src 必填項雳攘,指定圖片資源,只能是圖片绍哎,不能是xml定義的drawable資源
- android:gravity 設置圖片的對齊方式来农,比如在layer-list中,默認會盡量填滿整個視圖崇堰,導致圖片可能會被拉伸,為了避免被拉伸,就可以設置對齊方式海诲,可取值為下面的值繁莹,多個取值可以用 | 分隔:
- top 圖片放于容器頂部,不改變圖片大小
- bottom 圖片放于容器底部特幔,不改變圖片大小
- left 圖片放于容器左邊咨演,不改變圖片大小
- right 圖片放于容器右邊,不改變圖片大小
- center 圖片放于容器中心位置蚯斯,包括水平和垂直方向薄风,不改變圖片大小
- fill 拉伸整張圖片以填滿容器的整個高度和寬度,默認值
- center_vertical 圖片放于容器垂直方向的中心位置拍嵌,不改變圖片大小
- center_horizontal 圖片放于容器水平方向的中心位置遭赂,不改變圖片大小
- fill_vertical 在垂直方向上拉伸圖片以填滿容器的整個高度
- fill_horizontal 在水平方向上拉伸圖片以填滿容器的整個寬度
- clip_vertical 附加選項,裁剪基于垂直方向的gravity設置横辆,設置top時會裁剪底部撇他,設置bottom時會裁剪頂部,其他情況會同時裁剪頂部和底部
- clip_horizontal 附加選項狈蚤,裁剪基于水平方向的gravity設置困肩,設置left時會裁剪右側,設置right時會裁剪左側脆侮,其他情況會同時裁剪左右兩側
- android:antialias 設置是否開啟抗鋸齒
- android:dither 設置是否抖動锌畸,圖片與屏幕的像素配置不同時會用到,比如圖片是ARGB 8888的靖避,而屏幕是RGB565
- android:filter 設置是否允許對圖片進行濾波潭枣,對圖片進行收縮或者延展使用濾波可以獲得平滑的外觀效果
- android:tint 給圖片著色,比如圖片本來是黑色的筋蓖,著色后可以變成白色
- android:tileMode 設置圖片平鋪的方式卸耘,取值為下面四種之一:
- disable 不做任何平鋪,默認設置
- repeat 圖片重復鋪滿
- mirror 使用交替鏡像的方式重復圖片的繪制
- clamp 復制圖片邊緣的顏色來填充容器剩下的空白部分粘咖,比如引入的圖片如果是白色的邊緣蚣抗,那么圖片所在的容器里除了圖片,剩下的空間都會被填充成白色
- android:alpha 設置圖片的透明度瓮下,取值范圍為0.0~1.0之間翰铡,0.0為全透明,1.0為全不透明讽坏,API Level最低要求是11锭魔,即Android 3.0
- android:mipMap 設置是否可以使用mipmap,但API Level最低要求是17路呜,即Android 4.2
- android:autoMirrored 設置圖片是否需要鏡像反轉迷捧,當布局方向是RTL织咧,即從右到左布局時才有用,API Level 19(Android 4.4)才添加的屬性
- android:tileModeX 和tileMode一樣設置圖片的平鋪方式漠秋,只是這個屬性只設置水平方向的平鋪方式笙蒙,這是API Level 21(Android 5.0)才添加的屬性
- android:tileModeY 和tileMode一樣設置圖片的平鋪方式,只是這個屬性只設置垂直方向的平鋪方式庆锦,這是API Level 21(Android 5.0)才添加的屬性
- android:tintMode 著色模式捅位,也是API Level 21(Android 5.0)才添加的屬性
.9 圖片
nine-patch標簽
使用nine-patch標簽可以對點九圖片做一些設置處理,不過可設置的屬性并不多:
- android:src 必填項搂抒,必須指定點九類型的圖片
- android:dither 設置是否抖動艇搀,圖片與屏幕的像素配置不同時會用到,比如圖片是ARGB 8888的求晶,而屏幕是RGB565
- android:tint 給圖片著色焰雕,比如圖片本來是黑色的,著色后可以變成白色
- android:tintMode 著色模式誉帅,API Level 21(Android 5.0)才添加的屬性
- android:alpha 設置圖片的透明度淀散,取值范圍為0.0~1.0之間,0.0為全透明蚜锨,1.0為全不透明档插,API Level最低要求是11
- android:autoMirrored 設置圖片是否需要鏡像反轉,當布局方向是RTL亚再,即從右到左布局時才有用郭膛,API Level 19(Android 4.4)才添加的屬性