最近在系統地看Android Drawable相關內容,做個記錄,也給大家分享分享,希望有些作用。
一.Drawable概述
drawable的優點:
1.非圖片類型的Drawable占用的內存空間小
2.使用簡單,實現相同效果 比自定義view成本低
在安卓中Drawable 是一個抽象概念,可在畫布上進行繪制的所有元素都可歸于該類如常見的圖片或顏色等。drawable 通常用 xml 定義,開發中常作為背景使用。Drawable是一個抽象類,是所有drawable對象的基類。drawable子類有好多:
與View不同的是,Drawable不支持任何可與用戶交互的事件如onclick()等。
通常在開發中常用的有以下幾種形式:
1.Bitmap 簡單drawable 如png或jpg圖片 <bitmap>
2.Nine Patch ? .9圖 <nine_patch>
3. Layers 支持復合的drawable 繪制時先放的在底部后放的在頂部,依此 ?<layer-list>
4.States ?根據狀態設drawable ?對應于常見<selector>標簽
5.Lever drawable集合 集合中每個drawable都有一個等級,根據等級切換drawable. ?<level-list>
6.scale 可根據自己的等級將指定drawable 縮放比例 <scale>
7.Shape ?通常繪制按鈕背景(帶外邊框)用到
介紹得差不多了現在拿幾個常見的Drawable來耍耍吧(XML):
二:BitmapDrawable
最簡單的drawable ,就是表示一張圖片。對應于標簽<bitmap>。
在drawable中創建xml文件bitmap_xml:
在布局文件act_bitmap中引用作為背景:
我們來看看bitmap在選擇不同tileMode情況下的顯示效果:
看圖說話 :disabled(默認值)是關9平鋪模式(常用,這就不做贅述啦);clamp貌似看起來沒什么特殊效果,呃,其實在clamp模式下,圖片四周的像素是會向周圍區域擴散的 ;repeat 顧名思義 重復,簡單的水平豎直方向上平鋪;mirror 也就是鏡相效果,從圖上也能看到圖片在水平豎直兩個方向都有鏡面投影效果。
三:LayerDrawable
一種層次化的Drawable集合,將不同drawable放在不同層上達到一種疊加的效果。對應于<layer-list>標簽。說得太多不如一試:
先介紹一下一些常用屬性:
假設要實現底部一張圖片上面疊上 一個圓圈,代碼如下:
然后將layer_.xml作為ImageView背景,最終效果如下:
四.StateListDrawable
它也是一個drawable集合,每個drawable對應于view的一種狀態?;蛟S對它不是很熟悉,但它所對應的標簽<selector>應該不陌生。
五.LevelListDrawable
也是一個drawable集合,對應于<level-list>標簽,集合中每個drawable都有一個等級(level)的概念,根據不同的等級,LevelListDrawable會切換為對應的Drawable
在drawable 新建level_.xml ;將開啟狀態drawable設置200-300;關閉設置為0-199
在activity中用Level改變ImageView的drawable:
效果圖:
六.InsetDrawable?
對應于<inset>標簽 可將其他Drawable內嵌到自己當中,并可以在四周留一定間距?
在布局文件中作為framlayout(高寬match-parent)的背景,效果如下圖:
第一波就說這么多,還有其他幾種Drawable,下次等工作不忙,再作整理記錄。