首先总结一下这篇文章中的关键点:

  • 自定义绘制的方式是重写绘制方法,其中最常用的是 onDraw()
  • 绘制的关键是 Canvas 的使用
  • Canvas 的绘制类方法: drawXXX() (关键参数:Paint)
  • Canvas 的辅助类方法:范围裁切和几何变换
  • 可以使用不同的绘制方法来控制遮盖关系

这里的知识点并不多,但大家可能也看出来了,我讲得并不细。这是因为知识点虽然不多,但细节还是很多的,仅仅靠一节分享不可能讲完。我会按照顺序把这些知识进行拆分,拆成几节来讲,你按照我的顺序学习下来,肯定会大有收获的。

开始的开始:onDraw()

自定义绘制的上手非常容易:提前创建好 Paint 对象,重写 onDraw(),把绘制代码写在 onDraw() 里面,就是自定义绘制最基本的实现。

让我们画个圆看看:

public class DrawActivity extends View {

   Paint paint = new Paint();

   @Override
   protected void onDraw(Canvas canvas) {
      super.onDraw(canvas);

      canvas.drawCircle(500,500,300,paint);
   }

   public DrawActivity(Context context, AttributeSet attrs) {
      super(context,attrs);
   }

完美运行。

android view绘制是异步 android view ondraw_android view绘制是异步

Canvas.drawXXX() 和 Paint 基础

drawXXX() 系列方法和 Paint 的基础掌握了,就能够应付简单的绘制需求。它们主要包括:

  1. Canvas 类下的所有 draw- 打头的方法,例如 drawCircle() drawBitmap()
  2. Paint 类的几个最常用的方法。具体是:
  • Paint.setStyle(Style style) 设置绘制模式
  • Paint.setColor(int color) 设置颜色
  • Paint.setStrokeWidth(float width) 设置线条宽度
  • Paint.setTextSize(float textSize) 设置文字大小
  • Paint.setAntiAlias(boolean aa) 设置抗锯齿开关

以上就是 Canvas 所有的简单图形的绘制。除了简单图形的绘制, Canvas 还可以使用 drawPath(Path path) 来绘制自定义图形。

drawPath(Path path, Paint paint) 画自定义图形

drawPath() 是可以绘制自定义图形。当你要绘制的图形比较特殊,使用简单的那些方法做不到的时候,就可以使用 drawPath() 来绘制。

drawPath(path) 这个方法是通过描述路径的方式来绘制图形的,它的 path 参数就是用来描述图形路径的对象。path 的类型是 Path ,使用方法大概像下面这样:

public class DrawActivity extends View {

   Paint paint = new Paint();
   Path path = new Path();//初始化path对象

   @Override
   protected void onDraw(Canvas canvas) {
      super.onDraw(canvas);

      path.addArc(200, 200, 400, 400, -225, 225);
      path.arcTo(400, 200, 600, 400, -180, 225, false);
      path.lineTo(400, 542);

      canvas.drawPath(path,paint);
   }

   public DrawActivity(Context context, AttributeSet attrs) {
      super(context,attrs);
   }

画了个心形图形,完美运行。

android view绘制是异步 android view ondraw_java_02

Path 可以描述直线、二次曲线、三次曲线、圆、椭圆、弧形、矩形、圆角矩形。把这些图形结合起来,就可以描述出很多复杂的图形。

先写到这里,后面的内容我会继续更新。