Drawable,意为”可绘制的“,它可以被绘制到画板上。Android提供了很多种内置的Drawable,你也可以自定义Drawable。那么,它和Bitmap有什么区别呢?显而易见,从它的名字中就体现出它被赋予抽象色彩的存在意义,而Bitmap就是一个具体的可以绘制到屏幕中的图像。可见,官方希望我们去继承并扩展,只是很少有人这么做罢了。
常见的Drawable类型
- BitmapDrawable(位图)
- NinePatchDrawable(九宫格拉伸)
- LayerDrawable(图层)
- ColorDrawable(颜色)
- LevelListDrawable(层级列表)
- GradientDrawable(渐变)
- StateListDrawable(状态列表)
- ShapeDrawable(形状)
- VectorDrawable(SVG)
将Drawable绘制到Canvas上
void draw(Canvas canvas);
和View一样,自身都带有draw()方法,用于绘制到Canvas上,这个方法也是自定义Drawable必须重写的。
设置位置
void setBounds(int left, int top, int right, int bottom);
获取宽度
int getIntrinsicWidth();
获取高度
int getIntrinsicHeight();
渐变Drawable
GradientDrawable drawable = new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
drawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);//线性渲染
drawable.setColors(new int[]{ Color.BLACK, Color.WHITE });//从黑色渐变到白色,只是举个例子,很少会用这么丑的图形
drawable.setCornerRadius(DensityUtils.dp2px(10));
view.setBackgroundDrawable(drawable);
设置透明背景
BitmapDrawable drawable = new BitmapDrawable();
view.setBackgroundDrawable(drawable);
将Drawable绘制到View上的流程
- 创建一个Drawable的对象
- 通过drawable.setBounds()确定这个Drawable在此View中的绘制位置
- 画出来drawable.draw(canvas)