Android自定义View - Drawable

509 阅读1分钟

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上的流程

  1. 创建一个Drawable的对象
  2. 通过drawable.setBounds()确定这个Drawable在此View中的绘制位置
  3. 画出来drawable.draw(canvas)