路径

fill

对当前路径中的内容进行填充。默认的填充色为黑色。如果当前路径没有闭合,fill()方法会将起点和终点进行连接,然后填充。fill()填充的的路径是从beginPath()开始计算,但是不会将fillRect()包含进去。

stroke

画出当前路径的边框。默认颜色色为黑色。stroke()描绘的的路径是从beginPath()开始计算,但是不会将strokeRect()包含进去。

示例代码:

Page({
  onLoad: function () {
    const ctx = wx.createCanvasContext('myCanvas')
    //绘制一个矩形边框
    ctx.rect(10, 10, 100, 30)
    ctx.setStrokeStyle('yellow')
    ctx.stroke()
    //开始绘制路径
    ctx.beginPath()
    ctx.rect(10, 40, 100, 30)
    //yellow的设置只作用于下一个strokeRect
    ctx.setStrokeStyle('yellow')
    ctx.strokeRect(10, 70, 100, 30)
    ctx.rect(10, 100, 100, 30)
    //为当前路径添加边框
    ctx.setStrokeStyle('red')
    ctx.stroke()
    //平移后绘制不闭合的两个直线
    ctx.moveTo(300, 10)
    ctx.lineTo(200, 10)
    ctx.lineTo(200, 100)
    //填充当前路径
    ctx.fill()
    ctx.draw()
  },
})

运行结果(图8-24): 图8-24 fill与storke例图

fill与stroke的目标都是从调用beginPath()才开始,使用strokeRect(fillRect)的部分不包含在这之内,另外不闭合的区域在使用fill时会先自动闭合(连接起点终点)。

beginPath

开始创建一个路径,需要调用fill或者stroke才会使用路径进行填充或描边,也就是说每绘制一次路径,我们需要先调用beginPath()(除第一次以外,在建立canvas布局时系统会帮我们准备好,相当于调用了一次 beginPath()),然后调用绘制路径的API,最后通过调用fill()或stroke()方法来使我们的路径绘制在画布上。同一个路径内的多次setFillStyle()、setStrokeStyle()、setLineWidth()等设置,以最后一次设置为准。

closePath

关闭一个路径,关闭路径会连接起点和终点。如果关闭路径后没有调用 fill() 或者 stroke() 并开启了新的路径,那之前的路径将不会被渲染。

示例代码:

Page({
  onLoad: function () {
    const ctx = wx.createCanvasContext('myCanvas')
    //第一条路径,关闭前未调用fill()/stroke()
    ctx.rect(10, 10, 100, 30)
    ctx.closePath()

    //第二条路径
    ctx.beginPath()
    ctx.rect(10, 40, 100, 30)

    //使用fillRect填充蓝色区域
    ctx.setFillStyle('blue')
    ctx.fillRect(10, 70, 100, 30)

    //绘制矩形,设置填充色为黄色
    ctx.setFillStyle('yellow')
    ctx.rect(10, 100, 100, 30)

    //填充当前路径,红色
    ctx.setFillStyle('red')
    ctx.fill()
    ctx.draw()
  },
})

运行结果如图8-25: 图8-25 closePath效果图

第一个矩形因为没有调用fill/stroke,所以没有渲染,蓝色区域相当于第二天路径外,设置红色不会影响这一部分。而黄色的设置被更后边的红色设置覆盖了,所以第四个矩形仍然为红色。

moveTo

把路径移动到画布中的指定点,不创建线条。

lineTo

增加一个新点,然后创建一条从上次指定点到目标点的线。用 stroke() 方法来画线条。

moveTo与lineTo的参数(表8-84): 表8-84

参数 类型 说明
x Number 目标位置的x坐标
y Number 目标位置的y坐标

arc

画一条弧线。创建一个圆可以用arc()方法指定其起始弧度为0,终止弧度为2 * Math.PI。用stroke()或者fill()方法来在canvas中画弧线。

参数(表8-85): 表8-85

参数 类型 说明
x Number 圆的x坐标
y Number 圆的y坐标
r Number 圆的半径
sAngle Number 起始弧度,单位弧度(在3点钟方向)
eAngle Number 终止弧度
counterclockwise Boolean 可选。指定弧度的方向是逆时针还是顺时针。默认是false,即顺时针。

示例代码:

Page({
  onLoad: function () {
    const ctx = wx.createCanvasContext('myCanvas')
    //绘制圆形背景,颜色为“#EEEEEE”
    ctx.arc(100, 75, 50, 0, 2 * Math.PI)
    ctx.setFillStyle('#EEEEEE')
    ctx.fill()
    //绘制横轴(40,75)到(160,75)与纵轴(100,15)到(100,135),颜色为“#AAAAAA”
    ctx.beginPath()
    ctx.moveTo(40, 75)
    ctx.lineTo(160, 75)
    ctx.moveTo(100, 15)
    ctx.lineTo(100, 135)
    ctx.setStrokeStyle('#AAAAAA')
    ctx.stroke()
    //绘制文字
    ctx.setFontSize(12)
    ctx.setFillStyle('black')
    ctx.fillText('0', 165, 78)
    ctx.fillText('0.5*PI', 83, 145)
    ctx.fillText('1*PI', 15, 78)
    ctx.fillText('1.5*PI', 83, 10)
    //绘制三个点,其实就是绘制半径很小的圆,每次需要先调用beginPath()
    //圆心
    ctx.beginPath()
    ctx.arc(100, 75, 2, 0, 2 * Math.PI)
    ctx.setFillStyle('lightgreen')
    ctx.fill()
    //起始弧度
    ctx.beginPath()
    ctx.arc(100, 25, 2, 0, 2 * Math.PI)
    ctx.setFillStyle('blue')
    ctx.fill()
    //终止弧度
    ctx.beginPath()
    ctx.arc(150, 75, 2, 0, 2 * Math.PI)
    ctx.setFillStyle('red')
    ctx.fill()
    //绘制3/4圆的弧线
    ctx.beginPath()
    ctx.arc(100, 75, 50, 0, 1.5 * Math.PI)
    ctx.setStrokeStyle('#333333')
    ctx.stroke()

    ctx.draw()
  },
})

运行结果如图8-26所示: 图8-26 弧线API例图

quadraticCurveTo

创建二次贝塞尔曲线路径。贝塞尔曲线是在计算机绘图中生产任意曲线的重要工具,通过起点(在这里曲线的起始点为路径中前一个点),终点与控制点(可能有多个,二次贝塞尔曲线的控制点为1个,控制点越多次数越高)来确定。

参数(表8-86): 表8-86

参数 类型 说明
cpx Number 贝塞尔控制点的x坐标
cpy Number 贝塞尔控制点的y坐标
x Number 结束点的x坐标
y Number 结束点的y坐标

bezierCurveTo

创建三次方贝塞尔曲线路径。与二次贝塞尔曲线类似,控制点由1个变为2个。

参数(表8-87): 表8-87

参数 类型 说明
cp1x Number 第一个贝塞尔控制点的 x 坐标
cp1y Number 第一个贝塞尔控制点的 y 坐标
cp2x Number 第二个贝塞尔控制点的 x 坐标
cp2y Number 第二个贝塞尔控制点的 y 坐标
x Number 结束点的 x 坐标
y Number 结束点的 y 坐标

示例代码:

Page({
  onLoad: function () {
    const ctx = wx.createCanvasContext('myCanvas')
    //二次贝塞尔曲线,颜色为红色
    ctx.beginPath()
    ctx.moveTo(20, 20)
    ctx.quadraticCurveTo(20, 100, 200, 20)
    ctx.setStrokeStyle('red')
    ctx.stroke()
    //三次贝塞尔曲线,颜色为绿色
    ctx.beginPath()
    ctx.moveTo(20, 20)
    ctx.bezierCurveTo(20, 100, 200, 100, 200, 20)
    ctx.setStrokeStyle('green')
    ctx.stroke()

    ctx.draw()
  },
})

运行结果如图8-27: 图8-27 贝塞尔曲线示意图

results matching ""

    No results matching ""