本文出自 “阿敏其人” 簡書博客,轉載或引用請注明出處。
Drawable就是一個圖像的對象,其可能是一張位圖,也可能是一個圖形。
(說明一點:eclipse下我們放圖片一般都是放在drawable的五個不同設配分辨率的文件夾下,但是在android studio下是存放在mipmap的五個文件夾下的)
as下的存放.png
?eclipse下.png
一、Drawable的簡介
Android把可繪制的對象抽象為Drawable,不同的圖形圖像資源就代表著不同的drawable類型。Android FrameWork提供了一些具體的Drawable實現,通常在代碼中都不會直接接觸Drawable的實現類。
在實際的開發過程中,會把使用到的資源都放置在res/drawable目錄,剩下的工作交給Android SDK 就行了,當需要使用圖片資源的時候,可以使用@drawable標志在xml中引用drawable資源就行,也可以在代碼中使用id引用這些drawable資源。
在使用drawable資源的時,有一點需要注意,drawable默認是內存共享的,也就說在不同的地方使用了同一個drawable,它們都指向相同的資源,而且具有相同的狀態,如果在一個地方修改了這個drawable,所有使用它的地方都會改變。
- Drawable有很多種,但是簡單說到底既可以說就是圖像。
- Drawable是一個抽象類,它使所有Drawable對象的基類。
- Drawable可以通過getIntrinsicWidth和getIntrinsicHeight這兩個參數獲得內部的寬高。圖片的Drawable才有寬高,顏色的Drawable沒有寬高,圖片的Drawable在用作背景是會被拉伸,那么這個時候我們就要區分Drawable的寬高和View的寬高了。
二、Drawable的分類
平常我們把圖片拉進去對應的Drawable文件夾(或者說mipmap文件夾,下面都稱為drawable文件夾)這就不用說了。這是我們最常見的方式。
Android內置了如下幾種Drawable類型:
- BitmapDrawable Drawable子類之—— BitmapDrawable (可控制對齊平鋪的圖像)
- ColorDrawable
- GradientDrawable
- NinePatchDrawable
- InsetDrawable Drawable子類之——InsetDrawable (嵌入)
- ClipDrawable Drawable子類之——ClipDrawable (裁剪圖像)
- ScaleDrawable
- RotateDrawable
- AnimationDrawable
- LayerDrawable Drawable子類之——LayoutDrawable (圖層疊加)
- LevelListDrawable Drawable子類之——LevelListDrawable (等級列表圖片)
- StateListDrawable Drawable子類之—— ShapeDrawable (圖形定義)
- TransitionDrawable Drawable子類之——TransitionDrawable (漸變)
說起來有13個,但是常用的只有一部分。我們說的也只是一部分。