Canvas(自绘画布)

大约 6 分钟

Canvas(自绘画布)

结合CanvasContext提供绘制图形的接口,对齐 H5 Canvas 能力,可用于绘制直线、曲线、矩形、圆形、文本等

组件使用示例open in new window

以下是Canvas的构造代码,初始化 Canvas注册一个渲染回调函数,通过回调的CanvasContext绘制一条直线

 Canvas ({
   attr {
     absolutePosition(0f, 0f, 0f, 0f)
   }
 }) { context, width, height ->
     context.beginPath()
     context.strokeStyle(Color.RED)
     context.lineWidth(2.0f)
     context.moveTo(0f, 0f)
     context.lineTo(width, height)
     context.stroke()
    }

属性

支持所有基础属性

事件

支持所有基础事件

CanvasContext(画布上下文)

Canvas主要通过CanvasContext进行图形绘制,CanvasContext 绘制接口如下:

路径操作

beginPath

新建一条路径,生成之后,图形绘制命令被指向到路径上生成路径

moveTo

将笔触移动到指定的坐标x以及y上

参数描述类型
x指定的坐标xFloat
y指定的坐标yFloat

lineTo

绘制一条从当前位置到指定x以及y位置的直线

参数描述类型
x移动到指定的坐标xFloat
y移动指定的坐标yFloat

arc

创建弧/曲线(用于创建圆或部分圆)

参数描述类型
centerX圆弧中心点xFloat
centerY圆弧中心点yFloat
radius圆弧半径Float
startAngle圆弧起始角(单位弧度,例:PI.toFloat())Float
endAngle圆弧终止角(单位弧度,例:PI.toFloat())Float
counterclockwise圆弧绘制是否逆时针绘制Boolean

closePath

闭合路径之后图形绘制命令又重新指向到上下文中

quadraticCurveTo

创建二次方贝塞尔曲线

参数描述类型
controlPointX贝塞尔控制点的 x 坐标Float
controlPointY贝塞尔控制点的 y 坐标Float
pointX结束点的 x 坐标Float
pointY结束点的 y 坐标Float

bezierCurveTo

创建三次方贝塞尔曲线

参数描述类型
controlPoint1X第一个贝塞尔控制点的 x 坐标Float
controlPoint1Y第一个贝塞尔控制点的 y 坐标Float
controlPoint2X第二个贝塞尔控制点的 x 坐标Float
controlPoint2Y第二个贝塞尔控制点的 y 坐标Float
pointX结束点的 x 坐标Float
pointY结束点的 y 坐标Float

描边与填充

stroke

通过线条来绘制图形轮廓

strokeStyle

设置笔触的颜色或渐变

参数描述类型
color描边颜色Color

参数描述类型
linearGradient线性渐变对象CanvasLinearGradient

fill

通过填充路径的内容区域生成实心的图形

fillStyle

设置填充内容区域的颜色或渐变

参数描述类型
color填充颜色Color

参数描述类型
linearGradient线性渐变对象CanvasLinearGradient

线条样式

lineWidth

设置线条宽度(默认为0f)

参数描述类型
width线条宽度Float

setLineDash

设置虚线样式,如果要切换至实线模式,将参数设置为空数组。

参数描述类型
intervals线和间隙的交替长度List<Float>

lineCapRound

设置线条末端的样式为圆形的

lineCapButt

设置线条末端的样式为平直的

lineCapSquare

设置线条末端的样式为方形的

渐变

createLinearGradient

创建线性渐变对象

参数描述类型
x0起始点的 x 坐标Float
y0起始点的 y 坐标Float
x1结束点的 x 坐标Float
y1结束点的 y 坐标Float

该方法返回一个CanvasLinearGradient对象,该对象可以调用addColorStop方法向渐变中添加一个颜色停点。不同颜色停点之间会形成线性渐变。

addColorStop

参数描述类型
stopIn01颜色停点的位置,范围在 0 到 1 之间Float
color颜色停点的颜色Color

CanvasLinearGradient对象添加完颜色停点之后即可作为fillStylestrokeStyle的参数应用于填充渐变和描边渐变。

createRadialGradient实验性API,仅iOS支持

创建径向渐变

注:实验性API,仅iOS支持

参数描述类型
x0开始圆的圆心 x 坐标Float
y0开始圆的圆心 y 坐标Float
r0开始圆的半径Float
x1结束圆的圆心 x 坐标Float
y1结束圆的圆心 y 坐标Float
r1结束圆的半径Float
alpha整体透明度,一般为1f,取值范围 [0f, 1f]Float
colors渐变中的颜色数组(可变参数)Color

文本

textAlign

设置文本对齐方式

参数描述类型
textAlign文本对齐方式TextAlign

TextAlign 枚举值:

描述
LEFT左对齐
CENTER居中对齐
RIGHT右对齐

font

设置文本样式

参数描述类型
style字体样式(可选,默认 NORMAL)FontStyle
weight字体粗细(可选,默认 NORMAL)FontWeight
size字体大小(可选,默认 15f)Float
family字体名称(可选,默认为空)String

FontStyle 枚举值:

描述
NORMAL正常
ITALIC斜体

FontWeight 枚举值:

描述
NORMAL正常(400)
MEDIUM中等(500)
SEMISOLID半粗(600)
BOLD粗体(700)

measureText

测量文本尺寸,返回 TextMetrics 对象

参数描述类型
value要测量的文本String

TextMetrics 属性:

属性描述类型
width文本宽度Float
actualBoundingBoxLeft文本左边界距离Float
actualBoundingBoxRight文本右边界距离Float
actualBoundingBoxAscent文本基线上方高度Float
actualBoundingBoxDescent文本基线下方高度Float

fillText

在指定位置绘制填充文本

参数描述类型
text文本String
x文本位置的坐标xFloat
y文本位置的坐标yFloat

strokeText

在指定位置绘制描边文本

参数描述类型
text描边文本String
x描边位置的坐标xFloat
y描边位置的坐标yFloat

图像绘制

drawImage

在画布上绘制图像,支持三种重载形式:

基础绘制:

参数描述类型
image图像引用ImageRef
dx目标 x 坐标Float
dy目标 y 坐标Float

指定尺寸绘制:

参数描述类型
image图像引用ImageRef
dx目标 x 坐标Float
dy目标 y 坐标Float
dWidth目标宽度Float
dHeight目标高度Float

裁剪绘制:

参数描述类型
image图像引用ImageRef
sx源图像裁剪区域 x 坐标Float
sy源图像裁剪区域 y 坐标Float
sWidth源图像裁剪区域宽度Float
sHeight源图像裁剪区域高度Float
dx目标 x 坐标Float
dy目标 y 坐标Float
dWidth目标宽度Float
dHeight目标高度Float

状态管理

save

保存当前绑定的状态(包括变换矩阵、裁剪区域、样式等)

saveLayer

保存当前状态并创建一个新的图层

参数描述类型
x图层起始 x 坐标Float
y图层起始 y 坐标Float
width图层宽度Float
height图层高度Float

restore

恢复之前保存的状态

裁剪

clip

从原始画布剪切任意形状和尺寸的区域

参数描述类型
intersect是否使用交集模式(默认为 true)Boolean

clipPathIntersect

使用交集模式裁剪路径(等同于 clip(true)

clipPathDifference

使用差集模式裁剪路径(等同于 clip(false)

变换

translate

平移画布原点

参数描述类型
xx 方向平移距离Float
yy 方向平移距离Float

scale

缩放画布

参数描述类型
xx 方向缩放比例Float
yy 方向缩放比例Float

rotate

旋转画布

参数描述类型
angle旋转角度(弧度)Float

skew

倾斜画布

参数描述类型
xx 方向倾斜角度Float
yy 方向倾斜角度Float

transform

应用变换矩阵

参数描述类型
array3x3 变换矩阵(9个元素的 FloatArray)FloatArray