Drawable

前言

Drawable表示的是一種可以在Canvas上進行繪制的抽象的概念。
層次關系
分類
自定義Drawable
有點:1.使用簡單較自定義View;2.非圖片類型的Drawable占用空間小,減少apk體積;3.可以用來做出一些特殊的UI效果。

簡介

Drawable常用來作為View的背景。一般通過XML來定義,通過代碼略顯復雜。
Drawable的內(nèi)部寬高這個參數(shù)比較重要,通過getIntrinsicWidth與getInttrinsicHeight獲取。并不是所有的Drawable都有內(nèi)部寬高。圖片Drawable的內(nèi)部寬高就是圖片的寬高。顏色Drawable是沒有內(nèi)部寬高的。Drawable的內(nèi)部寬高不等同與它的大小。一般來說,Drawable是沒有大小的。當作為View的背景時,會被拉伸/壓縮到View的同等大小。

層次關系

打開Drawable源碼,Ctrl + H打開類的派生結構圖

2017-03-08_091223.png

看到有很多種的Drawable

Drawable的分類

1.BitmapDrawable
<bitmap/>
BitmapDrawable表示一張圖片。實際開發(fā)中,可以直接引用原始的圖片,也可以用XML的方式來描述它來設置更多的效果。比如antialias(抗鋸齒),dither(抖動效果),filter(過濾效果),gravity(圖片在容器的位置)等。
2.ShapeDrawable
<shape/>
實際開發(fā)中這個接觸得比較多。我開發(fā)過的項目中圓角矩形按鈕就用ShapeDrawable作為背景。支持rectangle矩形,oval圓形,line橫線,ring圓環(huán),radius四角圓弧。用顏色填充圖形,支持漸變,描邊支持虛線。drawable固有大小(insrinsic)屬性的含義。有大體了解,用的時候查api就行了。
3.LayerDrawable
<layer-list/>
Drawable疊加,一個<item/>標簽表示一個層。android:top等數(shù)據(jù)表示Drawable相對于View的上下左右偏移量。所有的drawable都會被縮放到View的大小。下面的item會覆蓋上面的item.
4.StateListDrawable
<selector/>
也表示Drawable的集合,每個Drawable對應View的一個狀態(tài)。
要注意的屬性:constantSize表示是否有固定大小,true切換狀態(tài)時最大大小會設置成固有大小。
variablePadding表示是否有固定的padding.
5.LevelDrawable
<level-list/>
也是Drawable的集合,里邊的item可以設置最大最小的level.范圍0-10000.通過Drawable的setLevel方法控制Drawable的顯示。如果作為ImageView的前景,可以用Image的setImageLevel來設置。
7.TransitionDrawable
<transition/>
用于實現(xiàn)Drawable之間的淡入淡出效果。
8.InsetDrawable
<inset/>
當一個View希望自己的背景比自己的實際大小小的時候用InsetDrawable.
9.ScaleDrawable
<scale/>
控制Drawable的縮放.設置scaleWidth與scaleHeight的值來來控制縮放比,同時將level設置,表示縮放的比例,level的值在0到10000之間,也會影響縮放大小
10.ClipDrawable
<clip/>
裁剪Drawable,通過設置level來控制裁剪比例,level的值在0到10000之間。通過android:clipOrigentation與android:gravity來控制裁剪方向。
11.自定義Drawable
Drawable的工作原理是draw方法,重寫draw方法來自定義Drawable.
自定義的Drawable無法在xml中使用,且要注意getIntrinsicXxx方法,因為對View的wrap_content有影響。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一、 Drawable簡介 1 Drawable表示的是一種可以在Canvas上進行繪制的抽象的概念,可以是純顏色...
    黃海佳閱讀 1,297評論 0 10
  • 轉載自Keegan小鋼并標明原文鏈接:http://keeganlee.me/post/android/20150...
    堅持編程_lyz閱讀 1,265評論 0 1
  • 前言 本文是本人閱讀《Android開發(fā)藝術探索》的第6章《Android的Drawable》后的總結筆記。包含了...
    daking閱讀 5,419評論 2 29
  • 1、Drawable 簡介 Drawable——可簡單理解為可繪制物,表示一些可以繪制在 Canvas 上的對象。...
    牧秦丶閱讀 15,349評論 0 15
  • 我理解的克制有兩重性,有被動的不去做某事和主動的不要讓自己懶得做某事,我們的大多數(shù)想法是需要克制來完成。 我想最能...
    輕旅忠耀閱讀 266評論 0 0

友情鏈接更多精彩內(nèi)容