Skip to main content
版本:v3

CANVAS

API_LEVEL 3.0 开始支持,API 兼容性请参考 API_LEVEL

canvas_demo.jpg

Canvas 画布。

当前 Canvas 的能力包括:

  1. 基础图形绘制,线、点、矩形、矩形填充、椭圆、扇形、多边形
  2. 图片绘制
  3. 文本绘制
  4. 画笔
  5. 画布纵向堆叠,最多可以叠加三层
  6. 清理画布
  7. 支持 addEventListener 方法,监听用户交互事件

创建 UI 控件

import { createWidget, widget } from '@zos/ui'

const canvas = createWidget(widget.CANVAS, Param)

Param: object

属性说明是否必须类型
xCanvas x 坐标number
yCanvas y 坐标number
wCanvas 画布宽度number
hCanvas 画布高度number
const canvas = createWidget(widget.CANVAS, {
x: 0,
y: 0,
w: 100,
h: 100
})

canvas.setPaint

设置画笔

setPaint(Param: object): void

Param: object

属性说明是否必须类型
color颜色number
line_width线宽number
canvas.setPaint({
color: 0xff0000,
line_width: 10
})

canvas.drawPixel

绘制单个像素点

drawPixel(Param: object): void

Param: object

属性说明是否必须类型
xx 坐标number
yy 坐标number
color颜色number
canvas.drawPixel({
x: 0,
y: 0,
color: 0xffffff
})

canvas.drawLine

绘制线段,线宽和颜色通过 setPaint 画笔设置

drawLine(Param: object): void

Param: object

属性说明是否必须类型
x1起始点 x 坐标number
y1起始点 y 坐标number
x2结束点 x 坐标number
y2结束点 y 坐标number
color颜色number
canvas.drawLine({
x1: 100,
y1: 100,
x2: 200,
y2: 100,
color: 0xffffff
})

Rectangle

  1. 绘制矩形路径,线宽和颜色通过 setPaint 画笔设置
strokeRect(Param: object): void
  1. 绘制矩形填充
drawRect(Param: object): void

Param: object

属性说明是否必须类型
x1起始点 x 坐标number
y1起始点 y 坐标number
x2结束点 x 坐标number
y2结束点 y 坐标number
color颜色number
canvas.drawRect({
x1: 60,
y1: 20,
x2: 120,
y2: 60,
color: 0xff00ff
})

Circle

  1. 绘制圆形路径,线宽和颜色通过 setPaint 画笔设置
strokeCircle(Param: object): void
  1. 绘制圆形填充
drawCircle(Param: object): void

Param: object

属性说明是否必须类型
center_x圆心 x 坐标number
center_y圆心 y 坐标number
radius半径number
color颜色number
canvas.drawCircle({
center_x: 80,
center_y: 140,
radius: 40,
color: 0xfff400
})

Ellipse

  1. 绘制椭圆路径,线宽和颜色通过 setPaint 画笔设置
strokeEllipse(Param: object): void
  1. 绘制椭圆填充
drawEllipse(Param: object): void

Param: object

属性说明是否必须类型
center_x椭圆中心 x 坐标number
center_y椭圆中心 y 坐标number
radius_xx 方向轴半径number
radius_yy 方向轴半径number
color颜色number
canvas.drawEllipse({
center_x: 80,
center_y: 300,
radius_x: 60,
radius_y: 80,
color: 0xff0000
})

Arc

与 Ellipse 相比多了 start_angleend_angle,从椭圆中心来截取椭圆的一部分作为扇形。

  1. 绘制路径
strokeArc(Param: object): void
  1. 绘制填充
drawArc(Param: object): void

Param: object

属性说明是否必须类型
center_x椭圆中心 x 坐标number
center_y椭圆中心 y 坐标number
radius_xx 方向轴半径number
radius_yy 方向轴半径number
start_angle开始角度(3 点钟方向为 0 度)number
end_angle开始角度(3 点钟方向为 0 度)number
color颜色number
canvas.drawArc({
center_x: 280,
center_y: 200,
radius_x: 60,
radius_y: 80,
start_angle: -150,
end_angle: -30,
color: 0xfff400
})

Polygon

  1. 绘制多边形路径,线宽和颜色通过 setPaint 画笔设置
strokePoly(Param: object): void
  1. 绘制多边形填充
drawPoly(Param: object): void

Param: object

属性说明是否必须类型
data_array坐标数组,数组长度至少为 3Coordinate
color颜色number

Coordinate

属性说明类型
xx 方向坐标number
yy 方向坐标number
const coordinateArray = [
{ x: 233, y: 30 },
{ x: 130, y: 230 },
{ x: 400, y: 200 },
{ x: 233, y: 30 }
]

canvas.strokePoly({
data_array: coordinateArray
color: 0x00ffff,
})

canvas.drawText

绘制文本

drawText(Param: object): void

Param: object

属性说明是否必须类型
x文本 x 坐标number
y文本 y 坐标number
text文本内容string
text_size文本大小number
color颜色number
canvas.drawText({
x: 200,
y: 260,
text_size: 30,
text: 'Hello Zepp OS'
})

canvas.drawImage

绘制图片

drawImage(Param: object): void

Param: object

属性说明是否必须类型
x图片 x 坐标number
y图片 y 坐标number
w图片宽度number
h图片高度number
image图片路径string
alpha透明度[0-255],0 为全透明number
canvas.drawImage({
x: 0,
y: 0,
w: 466,
h: 466,
alpha: 255,
image: 'images/canvas/background.png'
})

canvas.clear

按矩形区域清理画布

clear(Param: object): void

Param: object

属性说明是否必须类型
x矩形 x 坐标number
y矩形 y 坐标number
w矩形区域宽度number
h矩形区域高度number
canvas.clear({
x: 400,
y: 0,
w: 64,
h: 64
})

交互事件

Canvas 支持 widget.addEventListener 监听交互事件,参考 widget.addEventListener(eventId, callback)

import { event } from '@zos/ui'

canvas.addEventListener(event.CLICK_UP, function cb(info) {
console.log(info.x)
console.log(info.y)
})