前言
本文介绍使用Canvas、Paint、Path等原生API,实现一个简易的画板。
绘图原理
Paint
Paint可以理解为我们现实中的画笔,在使用前我们需要对Paint进行初始化,比如颜色、画笔粗细、透明度等。为了让曲线更加的圆滑,我们也可以让Paint划出的内容做一些圆角处理等。下面是一个可以参考的Paint的初始化代码:
// 使用抗锯齿模式初始化画笔
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
// 设定当前画笔的绘制模式,STROKE为画线条
paint.setStyle(Paint.Style.STROKE);
// 为画笔设置颜色
paint.setColor(Color.BLACK);
// 设置画笔的透明度,范围:0~255
paint.setAlpha(0xFF);
// 设置画笔的线条宽度,也就是笔迹的粗细
paint.setStrokeWidth(10);
// 设置线条的头尾为圆角模式,这个是为了让线条看上去更圆滑
paint.setStrokeCap(Paint.Cap.ROUND);
Path
Path是android.graphics下的类,通俗来讲就是一个路径,通过点点之间的连线,就可以绘制出来的一条完整的线条。我们在触摸屏幕的时候,屏幕按照一定的频率采样,采样到的都是我们在采样时刻触摸在屏幕上的点,我们可以利用path,通过所有触摸的点,构成path,然后通过canvas绘制出来。
本次绘制使用到Path的方法如下:
moveTo(float x, float y)
- 设定path的起始点
quadTo(float controlX, float controlY, float x, float y)
- 将两点之间进行连线,从上一次的点添二阶贝塞尔曲线,接近控制点(controlX, controlY),结束于(x, y)。
Canvas
Canvas这个可以理解为一个画布,我们可以在上面画点、线、图形等。利用我们的笔(Paint),按照一定的方法(Path),来进行绘制。
绘制的方法如为:canvas.drawPath(path, paint)
,通过此方法,就可以将我们上面的Path利用我们自定义的Paint绘制出来。
简单的实现
我们自定义一个View,暂且称之为DrawView,继承自View,添加构造方法,重写onDr