Drawable 使用方法詳解

2022-09-08 19:57:14 字數 4714 閱讀 5728

drawable 是android 中影象顯示的常用方法。

概念:drawable 是指可在螢幕上繪製的圖形,已經通過getdrawable(int)等api檢索或者應用到具有 android:drawable 和 android:icon 等屬性的其他 xml 資源的圖形。

通過本章可以簡單了解兩者使用方法。

drawable 分類

bitmap 位圖 bitmapdrawable

可拉伸圖(*.9.png) ninepatchdrawable。

圖層 layerdrawable

不同狀態圖(選擇器) statelistdrawable

級別列表 levellistdrawable

轉換影象 transitiondrawable

插入可繪製物件

剪裁可繪製物件 clipdrawable

縮放可繪製物件 scaledrawable

形狀可繪製物件 shapedrawable

drawable與 bitmap 常用方法總結

我們不是牛逼的程式設計師,我們只是程式開發中的墊腳石。

我們不傳送紅包,我們只是紅包的搬運工。

繼承關係如下:

[j**a.lang.object]

↳android.graphics.drawable.drawable

drawable 分類如下:

bitmap 位圖 bitmapdrawable

可拉伸圖(*.9.png) ninepatchdrawable。

圖層 layerdrawable

不同狀態圖(選擇器) statelistdrawable

級別列表 levellistdrawable

轉換影象 transitiondrawable

插入可繪製物件

剪裁可繪製物件 clipdrawable

縮放可繪製物件 scaledrawable

形狀可繪製物件 shapedrawable

在 j**a 中:r.drawable.filename

在 xml 中:@[package:]drawable/filename

位圖影象。android 支援以下三種格式的位**件:.png(首選)、.jpg(可接受)、.gif(不建議)。這些檔案儲存到 res/drawable/ 目錄中

注:在構建過程中,可通過 aapt 工具自動優化位**件,對影象進行無失真壓縮。例如,不需要超過 256 色的真彩色 png 可通過調色盤轉換為 8 位 png。這樣產生的影象質量相同,但所需記憶體更少。因此請注意,此目錄中的影象二進位制檔案在構建時可能會發生變化。如果您計畫將影象解讀為位元流以將其轉換為位圖,請改為將影象放在 res/raw/ 資料夾中,在那裡它們不會進行優化

使用方法如下:

getresources().getdrawable(r.drawable.gril);
antialias

啟用、停用抗鋸齒

dither

當位圖的畫素配置與螢幕不同時(例如:argb 8888 點陣圖和 rgb 565 螢幕),啟用或停用位圖抖動。

filter

啟用或停用位圖過濾。當位圖收縮或拉伸以使其外觀平滑時使用過濾。

mipmap

啟用或停用 mipmap 提示

tilemode

定義平鋪模式。當平鋪模式啟用時,點陣圖會重複。重力在平鋪模式啟用時將被忽略

<?xml version="1.0" encoding="utf-8"?>

getresources().getdrawable(r.drawable.bitmap_xml);
ninepatch 是一種 png 影象,在其中可定義當檢視中的內容超出正常影象邊界時 android 縮放的可拉伸區域。此類影象通常指定為至少有乙個尺寸設定為 "wrap_content" 的檢視的背景,而且當檢視擴充套件以適應內容時,九宮格影象也會擴充套件以匹配檢視的大小。android 的標準 button 小部件使用的背景就是典型的九宮格影象,其必須拉伸以適應按鈕內的文字(或影象)。

-1. 常規使用方法同其他引用方式

-2. xml .9.png 同bitmap xml的使用方式

<?xml version="1.0" encoding="utf-8"?>

layerdrawable 是管理其他可繪製物件陣列的可繪製物件。列表中的每個可繪製物件按照列表的順序繪製,列表中的最後乙個可繪製物件繪於頂部。每個可繪製物件由單一 元素內的 元素表示。

<?xml version="1.0" encoding="utf-8"?>

statelistdrawable 是在 xml 中定義的可繪製物件,它根據物件的狀態,使用多個不同的影象來表示同乙個圖形。例如,button 小部件可以是多種不同狀態(按下、聚焦或這兩種狀態都不是)中的其中一種,而且可以利用狀態列錶可繪製物件為每種狀態提供不同的背景。

您可以在 xml 檔案中描述狀態列表。每個圖形由單一 元素內的 元素表示。每個 均使用各種屬性來描述應用作可繪製物件的圖形的狀態。

在每個狀態變更期間,將從上到下遍歷狀態列表,並使用第乙個與當前狀態匹配的專案 —此選擇並非基於「最佳匹配」,而是選擇符合狀態最低條件的第乙個專案。

此方法非常常用,比如狀態選擇器

-1. 常規使用方法同其他引用方式

-2. 選擇器 xml的使用方式

<?xml version="1.0" encoding="utf-8"?>

管理大量備選可繪製物件的可繪製物件,每個可繪製物件都分配有最大的備選數量。使用 setlevel() 設定可繪製物件的級別值會載入級別列表中 android:maxlevel 值大於或等於傳遞到方法的值的可繪製物件資源。

資源引用:

在 j**a 中:r.drawable.filename

在 xml 中:@[package:]drawable/filename

<?xml version="1.0" encoding="utf-8"?>

可通過 setlevel() 或 setimagelevel() 更改級別。

transitiondrawable 是可在兩種可繪製物件資源之間交錯淡出的可繪製物件。

每個可繪製物件由單一 元素內的 元素表示。不支援超過兩個專案。要向前轉換,請呼叫 starttransition()。要向後轉換,則呼叫 reversetransition()。

<?xml version="1.0" encoding="utf-8"?>

imagebutton button = (imagebutton) findviewbyid(r.id.button);

transitiondrawable drawable = (transitiondrawable) button.getdrawable();

drawable.starttransition(500);

在 xml 檔案中定義的以指定距離插入其他可繪製物件的可繪製物件。當檢視需要小於檢視實際邊界的背景時,此類可繪製物件很有用。

<?xml version="1.0" encoding="utf-8"?>

在 xml 檔案中定義的對其他可繪製物件進行裁剪(根據其當前級別)的可繪製物件。您可以根據級別以及用於控制其在整個容器中位置的重力,來控制子可繪製物件的裁剪寬度和高度。通常用於實現進度欄之類的專案。

<?xml version="1.0" encoding="utf-8"?>

imageview imageview=(imageview) findviewbyid(r.id.img_drawable);

clipdrawable clipdrawable=(clipdrawable) imageview.getdrawable();

clipdrawable.setlevel(clipdrawable.getlevel()+1000);

在 xml 檔案中定義的更改其他可繪製物件大小

<?xml version="1.0" encoding="utf-8"?>

在 xml 中定義的一般形狀。

<?xml version="1.0" encoding="utf-8"?>

由於涉及內容比較多,已經另起文章講述。

至此,drawable 的使用方法已基本完成

我們不是牛逼的程式設計師,我們只是程式開發中的墊腳石。

我們不傳送紅包,我們只是紅包的搬運工。

armlink使用方法詳解

一 基本術語 在介紹armlink的使用方法之前,先介紹要涉及到的一些術語。1 映像檔案 image 是指乙個可執行檔案,在執行的時候被載入到處理器中。乙個映像檔案有多個執行緒。它是elf executable and linking format 格式的。段 section 描述映像檔案的 或資料...

JS event使用方法詳解

event代表事件的狀態,例如觸發event物件的元素 滑鼠的位置及狀態 按下的鍵等等。event物件只在事件發生的過程中才有效。event的某些屬性只對特定的事件有意義。比如,fromelement 和 toelement 屬性只對 onmouseover 和 onmouseout 事件有意義。下...

bitset詳解 使用方法

關於bitset的一些測試 保留一下免得以後忘記 建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5 b0...