本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。
Drawable就是一个图像的对象,其可能是一张位图,也可能是一个图形。
(说明一点:eclipse下我们放图片一般都是放在drawable的五个不同设配分辨率的文件夹下,但是在android studio下是存放在mipmap的五个文件夹下的)
一、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个,但是常用的只有一部分。我们说的也只是一部分。