1. 程式人生 > >Drawable 詳解

Drawable 詳解

public abstract class Drawable 
extends Object 

java.lang.Object
   ↳ android.graphics.drawable.Drawable
Known direct subclasses    直接子類 AdaptiveIconDrawable
AnimatedImageDrawableAnimatedVectorDrawableBitmapDrawableColorDrawableDrawableContainerDrawableWrapperGradientDrawableLayerDrawableNinePatchDrawable
PictureDrawable
ShapeDrawableVectorDrawable
Known indirect subclasses      非直接子類 AnimatedStateListDrawableAnimationDrawableClipDrawable
InsetDrawableLevelListDrawablePaintDrawableRippleDrawableRotateDrawableScaleDrawableStateListDrawableTransitionDrawable

Drawable是 可以被畫的東西的通用抽象類,多數情況下Drawable一般用作為畫在螢幕上資源;Drawable類提供了一個通用的API去處理優先的各種型別的視覺化資源。與View不同,Drawble 沒有接收事件和使用者互動的能力。


除了簡單的繪畫,Drawable提供了大量的通用機制給客戶端去和正在被繪製的進行互動。


  •  setBounds(Rect)方法必須呼叫去告訴Drawable它應該在哪裡繪製和應該繪製多大,所有Drawables應該遵從請求的大小,通常只是簡單的縮放它們的畫像。客戶端可以用getIntrinsicHeight() 和getIntrinsicWidth()方法為Drawables找到偏好的大小 。
  •  getPadding(Rect) 方法可以從一些Drawables 返回一些關於如何設計Drawables裡面的內容。例如,一個打算作為按鈕控制元件的Drawable 需要返回正確放置自身內部標籤的padding。
  • setState(int[]) 方法允許客戶端告訴Drawable用那種狀態繪製,例如“focused”,“selected”,等。一些drawables會基於被選中的狀態來調整它們的畫像。
  • setLevel(int) 方法允許使用者提供簡單的持續控制,可以修改被展示的控制,例如,電池量和進度條。一些drawables 會基於當前的水平值修改它們的畫像。
  • Drawable可以通過用 Drawable.Callback介面回撥它的客戶端程式來呈現動畫,為了使動畫工作,所有客戶端程式都應該支援這樣的介面( (通過 setCallback(Drawable.Callback))。一個簡單的實現方式是通過系統功能例如 setBackground(Drawable) and ImageView


雖然通常在應用中不可見,但Drawables 會以以下幾種形式顯示:

  • Bitmap: 最簡單的Drawable,一個PNG或者 JPEG影象。
  • Nine Patch(通常叫9patch或者.9圖)PNG 格式的擴充套件,允許它指定關於怎樣拉伸和在裡面放置內容。
  • Vector(向量圖):  定義在XML檔案中,作為一組點,線,和曲線 伴隨著他相關的顏色資訊,這類的drawable可以無損地被縮放。
  • Shape: 包含簡單的繪製命令而非原生bitmap,允許它在一些情況下更好的調整大小。
  • Layers: 一個複合的drawable,在相互之間繪製多重的drawbles.
  • States: 一個複合的drawable,基於它的狀態在一組drawables中選擇一個。
  • Levels: 一個複合的drawable,基於它的水平值(level)在一組drawables中選擇一個。
  • Scale: 一個帶有唯一子drawable的複合drawable, 子drawable的整體大小是基於當前的水平值(level)來修改的。

讀者可以自行寫相關的例子來加深體驗,在這裡由於篇幅問題就不在這裡寫例子了,有疑問的同學可以留言。


自定義drawables

所有版本Android允許Drawable類被擴充套件和用在執行時取代framework提供的drawable。API 24開始,自定義drawables類可以用在XML中。


注意:自定義drawable類只能在你的應用包中使用,其他的應用是不能取載入它們的。


最低限度,自定義drawable類必須實現Drawable的abstract方法和過載draw(Canvas)方法去繪製內容。



自定義drawbles 類可以在XML中以多種形式使用:



用完整的類名作為XML元素的名稱。對於這個方法,自定義drawable類必須是public高層級的類。

   

 <com.myapp.MyCustomDrawable xmlns:android="http://schemas.android.com/apk/res/android"
     android:color="#ffff0000" />


    用drawable作為XML元素名並且從類的屬性指定完整路徑名。這個方法可以用在public 高層級類和public static 內部類。

 <drawable xmlns:android="http://schemas.android.com/apk/res/android"
 class="com.myapp.MyTopLevelClass$InnerCustomDrawable"
 android:color="#ffff0000" />


總結

Nested classes(巢狀的類

介面 Drawable.Callback

如果想要建立一個動畫繼承 Drawable 的drawable,就實現這個介面

Drawable.ConstantState

這個抽象類被Drawables用來儲存Drawables之間的共享狀態和資料


Public constructors (公共建構函式

Drawable()


Public methods

void applyTheme(Resources.Theme t)

Applies the specified theme to this Drawable and its children.

應用指定的theme(主題)在Drawable和它的孩子

boolean canApplyTheme()
void clearColorFilter()

Removes the color filter for this drawable.

從drawable中移除顏色過濾器

final Rect copyBounds()

Return a copy of the drawable's bounds in a new Rect.

在新的矩形(Rect)返回一個drawable的約束副本

final void copyBounds(Rect bounds)

Return a copy of the drawable's bounds in the specified Rect (allocated by the caller).

在指定的矩形(Rect)返回一個drawable的約束副本

static Drawable createFromPath(String pathName)

Create a drawable from file path name.

從路徑名(pathName)建立一個drawable

static Drawable createFromResourceStream(Resources res, TypedValue value, InputStream is,String srcName, BitmapFactory.Options opts)

This method was deprecated in API level P. Prefer the version without an Options object.

這個方法在API P 中已經廢棄了,請使用下面的方法

static Drawable createFromResourceStream(Resources res, TypedValue value, InputStream is,String srcName)

Create a drawable from an inputstream, using the given resources and value to determine density information.

從輸入流建立一個drawable,使用給定的資源和值去決定密度資訊。

static Drawable createFromStream(InputStream is, String srcName)

Create a drawable from an inputstream

從輸入流建立一個drawable

static Drawable createFromXml(Resources r, XmlPullParser parser)

Create a drawable from an XML document.

從一個XML檔案中建立一個drawable

static Drawable createFromXml(Resources r, XmlPullParser parser, Resources.Theme theme)

Create a drawable from an XML document using an optional Resources.Theme.

從一個XML文件用Resources.Theme建立一個drawable

static Drawable createFromXmlInner(Resources r, XmlPullParser parser, AttributeSet attrs,Resources.Theme theme)

Create a drawable from inside an XML document using an optional Resources.Theme.

從一個XML文件使用一個可選的Resources.Theme建立一個drawable

static Drawable createFromXmlInner(Resources r, XmlPullParser parser, AttributeSet attrs)

Create from inside an XML document.

從一個XML文件內建立

abstract void draw(Canvas canvas)

Draw in its bounds (set via setBounds) respecting optional effects such as alpha (set via setAlpha) and color filter (set via setColorFilter).

在它的約束內繪製,並遵從可選的效果,例如透明度alpha 和顏色過濾器

int getAlpha()

Gets the current alpha value for the drawable.

獲取當前透明度的值

final Rect getBounds()

Return the drawable's bounds Rect.

返回drawable的約束矩形

Drawable.Callback getCallback()

Return the current Drawable.Callback implementation attached to this Drawable.

返回當前這個Drawable實現的Drawable.Callback

int getChangingConfigurations()

Return a mask of the configuration parameters for which this drawable may change, requiring that it be re-created.

返回drawable可能會改變的配置引數,這需要drawable重建

ColorFilter getColorFilter()

Returns the current color filter, or null if none set.

返回當前的顏色過濾器,返回null如果沒設定的話

Drawable.ConstantState getConstantState()

Return a Drawable.ConstantState instance that holds the shared state of this Drawable.

返回存有這個Drawable的共享狀態的 Drawable.ConstantState 例項。

Drawable getCurrent()
Rect getDirtyBounds()

Return the drawable's dirty bounds Rect.

返回drawable的髒約束矩形

void getHotspotBounds(Rect outRect)

Populates outRect with the hotspot bounds.

使用熱點約束填充外矩形

int getIntrinsicHeight()

Returns the drawable's intrinsic height.

返回drawable的本身高度

int getIntrinsicWidth()

Returns the drawable's intrinsic width.

返回drawable的本身寬度

int

相關推薦

Drawable

public abstract class Drawable extends Object  java.lang.Object    ↳ android.grap

Android Drawable-思維導圖版

Drawable(67題) 版本:2018/5/11-1(0:44) 思維導圖 基本知識點 1.Drawable是什麼 1、Drawable是什麼? Android中Drawable是一個抽象類(一種可以在Canvas上

Android的Drawable分類和使用

一、前言 最近在看關於Android的書籍,發現居然把Drawable當做一個章節來講,感覺沒有必要啊,Drawable不就是圖片引用嗎。深入理解後才發現我們平常用的只是比較常用和簡單的,Drawable還是有很多其他實現方式的。今天就詳細講解一下Drawable。 二、概述 其實D

Android Drawable

1 Drawable概述 Drawable是一種影象的概念,但又不全是圖片,也可能是各種顏色組合而成的影象。通常將Drawable作為View的背景,而這些Drawable我們一般通過XML來定義,當

Android Studio下drawable圖示和mipmap圖示

建立drawable圖示 新建一個Android Studio專案,並將任務檢視切換到“Project”下,這時可以看到,系統在res目錄下,為我們建立了4個對應的drawable資料夾,如下圖所示。 如果沒有,請讀者自行建立(另外還有ldpi的xxxh

Android 樣式開發:Drawable分類資源彙總(一)

Drawable Resources 解釋為:可繪製物件資源。是指可在螢幕上繪製的圖形,以及可以使用 getDrawable(int) 等 API 檢索或者應用到具有 android:drawable

關於android中drawable資料夾下各類xml樣式檔案的使用

1、引言 在Eclipse中android程式專案目錄結構下的res資料夾新建drawable資料夾,並在drawable資料夾下新建各類的xml樣式檔案,供layout資料夾下的xml佈局檔案引用,以滿足對程式介面的需求開發。如圖1和圖2是drawable下

Android Drawable資源中selector、layer-list和shape標籤

在實際開發中,我們經常會對控制元件的樣式進行一些修改已滿足我們的要求,這時候就會引用 Drawable 資源的樣式檔案。 1、StateListDrawable 資源         StateListDrawable 用於組織多個 Drawable 物件。當使用 Stat

Android-Studio之mipmap目錄和drawable目錄

簡單說一下: 使用上沒有任何區別,你把它當drawable用就好了。 但是用mipmap系統會在縮放上提供一定的效能優化。 官方介紹: Mipmapping for drawables Using a mipmap as the source for

java Io 流類

修改 文件目錄 != exe [] 深入 clas one fileinput 關於java 流類的復習;習慣性的復習按照圖結構一層層往下深入去了解去復習,最後通過代碼來實現感覺印象會更深刻一些; 關於 I/O流:IO可以理解為JAVA用來傳遞數據的管道

cookie 和session 的區別

重復 處理方式 一行 所有 有效 依據 是把 存儲 一個 二者的定義: 當你在瀏覽網站的時候,WEB 服務器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇, 都紀錄下來。當下次你再光臨同一個網站,WEB 服務器會先看看有沒有它上次留下的

cd命令使用

表示 如果 用戶家目錄 roo 環境變量 方法 字符 實用 效果   cd命令是目錄切換命令,是shell內置命令。   語法:     cd [-L|-P] [dir]   選項:     -p 如果要切換到的目標目錄是一個符號連接,直接切換到符號連接指向的目標目錄   

setting.xml 配置

校驗 找不到 順序 裁剪 全局 -- mls leg 觸發 文件存放位置 全局配置: ${M2_HOME}/conf/settings.xml 用戶配置: ${user.home}/.m2/settings.xml note:用戶配置優先於全局配置。${user.home}

R數據可視化----ggplot2之標度、坐標軸和圖例

abs 調整 所有 不同的 size n) 默認 表達 idt 標度控制著數據到圖形屬性的映射,當有需要時,ggplot2會自動添加一個默認的標度。我們確實可以在不了解標度運行原理的情況下畫出許多圖形,但理解標度並學會如何操縱它們則將賦予我們對圖形更強的控制能力。 每一種圖

跨域資源共享CORS

附加 accep 不發送 地址 code 克服 通信 數據 ror 簡介 CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。 它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX

磁盤陣列 RAID 技術原理

十分 單獨 很好 不同的 raid1 miss 和數 會同 帶寬 RAID一頁通整理所有RAID技術、原理並配合相應RAID圖解,給所有存儲新人提供一個迅速學習、理解RAID技術的網上資源庫,本文將持續更新,歡迎大家補充及投稿。中國存儲網一如既往為廣大存儲界朋友提供免費、精

Web.Config文件

htm 用法 名稱 href 會話狀態 行為 cookie 程序配置 會話 一).Web.Config是以XML文件規範存儲,配置文件分為以下格式 1.配置節處理程序聲明 特點: 位於配置文件的頂部,包含在<configSections>標誌中。

oracle recyclebin

tables 執行 reat 手工 emp 命令 沒有 -- 釋放 今天在SOA應用數據庫上運用DBMS_REDEFITION包進行在線非分區表轉換分區表操作時,本想DROP掉建的臨時表cube_scope_temp不小心後面忘記加"temp"直接執行了,我等意識到這個問題

POI操作Excel,讀取xls和xlsx格式的文件

shee xss split 類型 後綴 .sh lan xls lin package org.ian.webutil; import java.io.File; import java.io.FileInputStream; import java.io.FileN

java.util包(二)——Connection接口

操作 相同 元素 叠代 cat roo soft true nbsp Connection接口介紹   Connection接口是java集合的root接口,沒有實現類,只有子接口和實現子接口的各種容器。主要用來表示java集合這一大的抽象概念。   Connection接