Android-自定义View之绘图

绘图

建议看启舰大神的系列博客,或者《android-自定义控件》,

在android的世界里面,你所看到的所有控件本质上都是通过逻辑概念绘画给“画”上去的,比如一张图片,也是“画”上去的,而我们看到如此多的动态效果其实是在每一帧绘制不同的图像,包装下形成动画,就是这么而来的。

基本而言我们所能用到的有这么几个逻辑概念:

  • Paint 英文词汇是绘画,是个动词,在这里我们可以理解为画笔画画这套动作,或者直接理解为画笔来表述好一点,它所能的就是“我该以什么方式来画”
  • Canvas 画布,我们所画的东西是画在画布上,然后通过画布进而映射到屏幕上。“我可以承载画画的内容”
  • Path 路径,点于点之间的连线
  • Rect 矩形
  • Bitmap位图

所以最基本动作就是

  1. 准备画笔
  2. 准备要画的内容
  3. 在画布上画画

画笔

The Paint class holds the style and color information about how to draw* geometries, text and bitmaps.

画笔类承载着关于如何取绘画的颜色风格。

绘制之前,我们需要了解,画笔有那些可以做的

1
2
3
4
5
6
7
8
9
10
11
12
mPaint = new Paint();
mPaint.setAntiAlias(true);//抗锯齿
mPaint.setStrokeWidth(45);//画笔宽度
mPaint.setStyle(Paint.Style.STROKE);//画笔风格填充和描边
mPaint.setStrokeCap(Paint.Cap.ROUND);//笔帽风格
mPaint.setStrokeJoin(Paint.Join.ROUND);//转角风格
mPaint.setColor(Color.Red);//颜色
mPaint.setXfermode();//图层叠加效果
mPaint.setShader();//设置印章
mPaint.setColorFilter();//设置颜色过滤,滤镜
mPaint.setMaskFilter();//设置阴影,发光
mPaint.setShadowLayer();//设置阴影

额,可以设置东西非常多,还是建议看启舰大神的书。

坐标

首先需要介绍下android的坐标系,它是以画布左上角为圆点,向下为正坐标,向右为正坐标。

1
2
3
4
5
-------------
|
| .
|
|

基本图形绘制

画笔设置到了后就可以画画了

绘制图形,线,弧,点

绘点的好理解,给出一个坐标就行了

绘制线的画就是给出若干个点

绘制矩形就是给出矩形四条边距离坐标轴的距离

绘制椭圆,高中的学习我们直到,一个椭圆是建立一个矩形中的,所以我们需要给出矩形,当然如果矩形变成正方形后,自然就成为圆了。

如果单纯画圆的画就需要给出圆心坐标,以及半径

绘制弧的的画就要给具体的角度了。android的角度轴是以x正方向为0,顺时针针增加。

1
2
3
4
5
6
7
canvas.drawLines(pts, mPaint);//线
canvas.drawPoint(500,500, mPaint);//点
canvas.drawRect(new Rect(40, 40, 150, 200), mPaint);//矩形
canvas.drawRoundRect(new RectF(200, 40, 400, 200), 10, 10, mPaint);//圆角矩形
canvas.drawOval(new RectF(400, 400, 700, 900), mPaint);//圆形或椭圆
canvas.drawCircle(200,200,10,mPaint);//圆
canvas.drawArc(new RectF(200,400,400, 700), 30, 200, false, mPaint);//区域

通过画出这些基本图形,结合动画也就能做出不错的效果了

canvas变换

事件处理

普通事件

手势检测

动画

封装控件