画布上进行绘制

2024-01-22 18:10 更新

使用RenderingContext在Canvas组件上进行绘制,绘制对象可以是矩形、文本、图片等。

说明

从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

接口

CanvasRenderingContext2D(settings?: RenderingContextSetting)

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名

参数类型

必填

参数描述

settings

RenderingContextSettings

RenderingContextSettings

RenderingContextSettings

RenderingContextSettings(antialias?: boolean)

用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名

参数类型

必填

参数描述

antialias

boolean

表明canvas是否开启抗锯齿。

默认值:false

属性

名称

类型

描述

fillStyle

string | CanvasGradient | CanvasPattern

指定绘制的填充色。

- 类型为string时,表示设置填充区域的颜色。

- 类型为CanvasGradient时,表示渐变对象,使用createLinearGradient方法创建。

- 类型为CanvasPattern时,使用createPattern方法创建。

从API version 9开始,该接口支持在ArkTS卡片中使用。

lineWidth

number

设置绘制线条的宽度。

strokeStyle

string | CanvasGradient | CanvasPattern

设置描边的颜色。

- 类型为string时,表示设置描边使用的颜色。

- 类型为CanvasGradient时,表示渐变对象,使用createLinearGradient方法创建。

- 类型为CanvasPattern时,使用createPattern方法创建。

从API version 9开始,该接口支持在ArkTS卡片中使用。

lineCap

CanvasLineCap

指定线端点的样式,可选值为:

- 'butt':线端点以方形结束。

- 'round':线端点以圆形结束。

- 'square':线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。

默认值:'butt'

从API version 9开始,该接口支持在ArkTS卡片中使用。

lineJoin

CanvasLineJoin

指定线段间相交的交点样式,可选值为:

- 'round':在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。

- 'bevel':在线段相连处使用三角形为底填充, 每个部分矩形拐角独立。

- 'miter':在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。

默认值:'miter'

从API version 9开始,该接口支持在ArkTS卡片中使用。

miterLimit

number

设置斜接面限制值,该值指定了线条相交处内角和外角的距离。

默认值:10

从API version 9开始,该接口支持在ArkTS卡片中使用。

font

string

设置文本绘制中的字体样式。

语法:ctx.font='font-size font-family'

- font-size(可选),指定字号和行高,单位只支持px。

- font-family(可选),指定字体系列。

语法:ctx.font='font-style font-weight font-size font-family'

- font-style(可选),用于指定字体样式,支持如下几种样式:'normal','italic'。

- font-weight(可选),用于指定字体的粗细,支持如下几种类型:'normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900。

- font-size(可选),指定字号和行高,单位只支持px。

- font-family(可选),指定字体系列,支持如下几种类型:'sans-serif', 'serif', 'monospace'。

默认值:'normal normal 14px sans-serif'

从API version 9开始,该接口支持在ArkTS卡片中使用。

textAlign

CanvasTextAlign

设置文本绘制中的文本对齐方式,可选值为:

- 'left':文本左对齐。

- 'right':文本右对齐。

- 'center':文本居中对齐。

- 'start':文本对齐界线开始的地方。

- 'end':文本对齐界线结束的地方。

ltr布局模式下'start'和'left'一致,rtl布局模式下'start'和'right'一致·。

默认值:'left'

从API version 9开始,该接口支持在ArkTS卡片中使用。

textBaseline

CanvasTextBaseline

设置文本绘制中的水平对齐方式,可选值为:

- 'alphabetic':文本基线是标准的字母基线。

- 'top':文本基线在文本块的顶部。

- 'hanging':文本基线是悬挂基线。

- 'middle':文本基线在文本块的中间。

- 'ideographic':文字基线是表意字基线;如果字符本身超出了alphabetic基线,那么ideograhpic基线位置在字符本身的底部。

- 'bottom':文本基线在文本块的底部。 与ideographic基线的区别在于ideographic基线不需要考虑下行字母。

默认值:'alphabetic'

从API version 9开始,该接口支持在ArkTS卡片中使用。

globalAlpha

number

设置透明度,0.0为完全透明,1.0为完全不透明。

从API version 9开始,该接口支持在ArkTS卡片中使用。

lineDashOffset

number

设置画布的虚线偏移量,精度为float。

默认值:0.0

从API version 9开始,该接口支持在ArkTS卡片中使用。

globalCompositeOperation

string

设置合成操作的方式。类型字段可选值有'source-over','source-atop','source-in','source-out','destination-over','destination-atop','destination-in','destination-out','lighter','copy','xor'。

默认值:'source-over'

从API version 9开始,该接口支持在ArkTS卡片中使用。

shadowBlur

number

设置绘制阴影时的模糊级别,值越大越模糊,精度为float。

默认值:0.0

从API version 9开始,该接口支持在ArkTS卡片中使用。

shadowColor

string

设置绘制阴影时的阴影颜色。

从API version 9开始,该接口支持在ArkTS卡片中使用。

shadowOffsetX

number

设置绘制阴影时和原有对象的水平偏移值。

从API version 9开始,该接口支持在ArkTS卡片中使用。

shadowOffsetY

number

设置绘制阴影时和原有对象的垂直偏移值。

从API version 9开始,该接口支持在ArkTS卡片中使用。

imageSmoothingEnabled

boolean

用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。

默认值:true

从API version 9开始,该接口支持在ArkTS卡片中使用。

height

number

组件高度。

单位:vp

从API version 9开始,该接口支持在ArkTS卡片中使用。

width

number

组件宽度。

单位:vp

从API version 9开始,该接口支持在ArkTS卡片中使用。

说明

fillStyle、shadowColor与 strokeStyle 中string类型格式为 'rgb(255, 255, 255)','rgba(255, 255, 255, 1.0)','#FFFFFF'。

fillStyle

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct FillStyleExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.fillStyle = '#0000ff'
  15. this.context.fillRect(20, 20, 150, 100)
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

lineWidth

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct LineWidthExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.lineWidth = 5
  15. this.context.strokeRect(25, 25, 85, 105)
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

strokeStyle

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct StrokeStyleExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.lineWidth = 10
  15. this.context.strokeStyle = '#0000ff'
  16. this.context.strokeRect(25, 25, 155, 105)
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

lineCap

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct LineCapExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.lineWidth = 8
  15. this.context.beginPath()
  16. this.context.lineCap = 'round'
  17. this.context.moveTo(30, 50)
  18. this.context.lineTo(220, 50)
  19. this.context.stroke()
  20. })
  21. }
  22. .width('100%')
  23. .height('100%')
  24. }
  25. }

lineJoin

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct LineJoinExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.lineWidth = 8
  16. this.context.lineJoin = 'miter'
  17. this.context.moveTo(30, 30)
  18. this.context.lineTo(120, 60)
  19. this.context.lineTo(30, 110)
  20. this.context.stroke()
  21. })
  22. }
  23. .width('100%')
  24. .height('100%')
  25. }
  26. }

miterLimit

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct MiterLimit {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.lineWidth = 8
  15. this.context.lineJoin = 'miter'
  16. this.context.miterLimit = 3
  17. this.context.moveTo(30, 30)
  18. this.context.lineTo(60, 35)
  19. this.context.lineTo(30, 37)
  20. this.context.stroke()
  21. })
  22. }
  23. .width('100%')
  24. .height('100%')
  25. }
  26. }

font

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Fonts {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.font = '30px sans-serif'
  15. this.context.fillText("Hello World", 20, 60)
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

textAlign

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CanvasExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.strokeStyle = '#0000ff'
  15. this.context.moveTo(140, 10)
  16. this.context.lineTo(140, 160)
  17. this.context.stroke()
  18. this.context.font = '18px sans-serif'
  19. this.context.textAlign = 'start'
  20. this.context.fillText('textAlign=start', 140, 60)
  21. this.context.textAlign = 'end'
  22. this.context.fillText('textAlign=end', 140, 80)
  23. this.context.textAlign = 'left'
  24. this.context.fillText('textAlign=left', 140, 100)
  25. this.context.textAlign = 'center'
  26. this.context.fillText('textAlign=center',140, 120)
  27. this.context.textAlign = 'right'
  28. this.context.fillText('textAlign=right',140, 140)
  29. })
  30. }
  31. .width('100%')
  32. .height('100%')
  33. }
  34. }

textBaseline

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct TextBaseline {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.strokeStyle = '#0000ff'
  15. this.context.moveTo(0, 120)
  16. this.context.lineTo(400, 120)
  17. this.context.stroke()
  18. this.context.font = '20px sans-serif'
  19. this.context.textBaseline = 'top'
  20. this.context.fillText('Top', 10, 120)
  21. this.context.textBaseline = 'bottom'
  22. this.context.fillText('Bottom', 55, 120)
  23. this.context.textBaseline = 'middle'
  24. this.context.fillText('Middle', 125, 120)
  25. this.context.textBaseline = 'alphabetic'
  26. this.context.fillText('Alphabetic', 195, 120)
  27. this.context.textBaseline = 'hanging'
  28. this.context.fillText('Hanging', 295, 120)
  29. })
  30. }
  31. .width('100%')
  32. .height('100%')
  33. }
  34. }

globalAlpha

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct GlobalAlpha {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.fillStyle = 'rgb(0,0,255)'
  15. this.context.fillRect(0, 0, 50, 50)
  16. this.context.globalAlpha = 0.4
  17. this.context.fillStyle = 'rgb(0,0,255)'
  18. this.context.fillRect(50, 50, 50, 50)
  19. })
  20. }
  21. .width('100%')
  22. .height('100%')
  23. }
  24. }

lineDashOffset

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct LineDashOffset {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.arc(100, 75, 50, 0, 6.28)
  15. this.context.setLineDash([10,20])
  16. this.context.lineDashOffset = 10.0
  17. this.context.stroke()
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

globalCompositeOperation

名称

描述

source-over

在现有绘制内容上显示新绘制内容,属于默认值。

source-atop

在现有绘制内容顶部显示新绘制内容。

source-in

在现有绘制内容中显示新绘制内容。

source-out

在现有绘制内容之外显示新绘制内容。

destination-over

在新绘制内容上方显示现有绘制内容。

destination-atop

在新绘制内容顶部显示现有绘制内容。

destination-in

在新绘制内容中显示现有绘制内容。

destination-out

在新绘制内容外显示现有绘制内容。

lighter

显示新绘制内容和现有绘制内容。

copy

显示新绘制内容而忽略现有绘制内容。

xor

使用异或操作对新绘制内容与现有绘制内容进行融合。

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct GlobalCompositeOperation {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.fillStyle = 'rgb(255,0,0)'
  15. this.context.fillRect(20, 20, 50, 50)
  16. this.context.globalCompositeOperation = 'source-over'
  17. this.context.fillStyle = 'rgb(0,0,255)'
  18. this.context.fillRect(50, 50, 50, 50)
  19. this.context.fillStyle = 'rgb(255,0,0)'
  20. this.context.fillRect(120, 20, 50, 50)
  21. this.context.globalCompositeOperation = 'destination-over'
  22. this.context.fillStyle = 'rgb(0,0,255)'
  23. this.context.fillRect(150, 50, 50, 50)
  24. })
  25. }
  26. .width('100%')
  27. .height('100%')
  28. }
  29. }

shadowBlur

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ShadowBlur {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.shadowBlur = 30
  15. this.context.shadowColor = 'rgb(0,0,0)'
  16. this.context.fillStyle = 'rgb(255,0,0)'
  17. this.context.fillRect(20, 20, 100, 80)
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

shadowColor

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ShadowColor {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.shadowBlur = 30
  15. this.context.shadowColor = 'rgb(0,0,255)'
  16. this.context.fillStyle = 'rgb(255,0,0)'
  17. this.context.fillRect(30, 30, 100, 100)
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

shadowOffsetX

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ShadowOffsetX {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.shadowBlur = 10
  15. this.context.shadowOffsetX = 20
  16. this.context.shadowColor = 'rgb(0,0,0)'
  17. this.context.fillStyle = 'rgb(255,0,0)'
  18. this.context.fillRect(20, 20, 100, 80)
  19. })
  20. }
  21. .width('100%')
  22. .height('100%')
  23. }
  24. }

shadowOffsetY

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ShadowOffsetY {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.shadowBlur = 10
  15. this.context.shadowOffsetY = 20
  16. this.context.shadowColor = 'rgb(0,0,0)'
  17. this.context.fillStyle = 'rgb(255,0,0)'
  18. this.context.fillRect(30, 30, 100, 100)
  19. })
  20. }
  21. .width('100%')
  22. .height('100%')
  23. }
  24. }

imageSmoothingEnabled

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ImageSmoothingEnabled {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
  8. build() {
  9. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  10. Canvas(this.context)
  11. .width('100%')
  12. .height('100%')
  13. .backgroundColor('#ffff00')
  14. .onReady(() =>{
  15. this.context.imageSmoothingEnabled = false
  16. this.context.drawImage( this.img,0,0,400,200)
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

height

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct HeightExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width(300)
  11. .height(300)
  12. .backgroundColor('#ffff00')
  13. .onReady(() => {
  14. let h = this.context.height
  15. let w = this.context.width
  16. this.context.fillRect(0, 0, 300, h/2)
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

width

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct WidthExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width(300)
  11. .height(300)
  12. .backgroundColor('#ffff00')
  13. .onReady(() => {
  14. let h = this.context.height
  15. let w = this.context.width
  16. this.context.fillRect(0, 0, w/2, 300)
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

方法

fillRect

fillRect(x: number, y: number, w: number, h: number): void

从API version 9开始,该接口支持在ArkTS卡片中使用。

填充一个矩形。

参数:

参数

类型

必填

默认值

说明

x

number

0

指定矩形左上角点的x坐标。

y

number

0

指定矩形左上角点的y坐标。

width

number

0

指定矩形的宽度。

height

number

0

指定矩形的高度。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct FillRect {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.fillRect(30,30,100,100)
  15. })
  16. }
  17. .width('100%')
  18. .height('100%')
  19. }
  20. }

strokeRect

strokeRect(x: number, y: number, w: number, h: number): void

绘制具有边框的矩形,矩形内部不填充。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

说明

x

number

0

指定矩形的左上角x坐标。

y

number

0

指定矩形的左上角y坐标。

w

number

0

指定矩形的宽度。

h

number

0

指定矩形的高度。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct StrokeRect {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.strokeRect(30, 30, 200, 150)
  15. })
  16. }
  17. .width('100%')
  18. .height('100%')
  19. }
  20. }

clearRect

clearRect(x: number, y: number, w: number, h: number): void

删除指定区域内的绘制内容。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x

number

0

指定矩形上的左上角x坐标。

y

number

0

指定矩形上的左上角y坐标。

w

number

0

指定矩形的宽度。

h

number

0

指定矩形的高度。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ClearRect {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.fillStyle = 'rgb(0,0,255)'
  15. this.context.fillRect(20,20,200,200)
  16. this.context.clearRect(30,30,150,100)
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

fillText

fillText(text: string, x: number, y: number, maxWidth?: number): void

绘制填充类文本。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

说明

text

string

''

需要绘制的文本内容。

x

number

0

需要绘制的文本的左下角x坐标。

y

number

0

需要绘制的文本的左下角y坐标。

maxWidth

number

-

指定文本允许的最大宽度。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct FillText {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.font = '30px sans-serif'
  15. this.context.fillText("Hello World!", 20, 100)
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

strokeText

strokeText(text: string, x: number, y: number, maxWidth?:number): void

绘制描边类文本。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

text

string

''

需要绘制的文本内容。

x

number

0

需要绘制的文本的左下角x坐标。

y

number

0

需要绘制的文本的左下角y坐标。

maxWidth

number

-

需要绘制的文本的最大宽度 。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct StrokeText {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.font = '55px sans-serif'
  15. this.context.strokeText("Hello World!", 20, 60)
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

measureText

measureText(text: string): TextMetrics

该方法返回一个文本测算的对象,通过该对象可以获取指定文本的宽度值。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

说明

text

string

''

需要进行测量的文本。

返回值:

类型

说明

TextMetrics

文本的尺寸信息。

TextMetrics类型描述:

属性

类型

描述

width

number

字符串的宽度。

height

number

字符串的高度。

actualBoundingBoxAscent

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到渲染文本的矩形边界顶部的距离,当前值为0。

actualBoundingBoxDescent

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到渲染文本的矩形边界底部的距离,当前值为0。

actualBoundingBoxLeft

number

平行于基线,从CanvasRenderingContext2D.textAlign 属性确定的对齐点到文本矩形边界左侧的距离,当前值为0。

actualBoundingBoxRight

number

平行于基线,从CanvasRenderingContext2D.textAlign 属性确定的对齐点到文本矩形边界右侧的距离,当前值为0。

alphabeticBaseline

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框的 alphabetic 基线的距离,当前值为0。

emHeightAscent

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框中 em 方块顶部的距离,当前值为0。

emHeightDescent

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框中 em 方块底部的距离,当前值为0。

fontBoundingBoxAscent

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到渲染文本的所有字体的矩形最高边界顶部的距离,当前值为0。

fontBoundingBoxDescent

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到渲染文本的所有字体的矩形边界最底部的距离,当前值为0。

hangingBaseline

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框的 hanging 基线的距离,当前值为0。

ideographicBaseline

number

从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框的 ideographic 基线的距离,当前值为0。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct MeasureText {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.font = '50px sans-serif'
  15. this.context.fillText("Hello World!", 20, 100)
  16. this.context.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200)
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

stroke

stroke(path?: Path2D): void

进行边框绘制操作。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

path

Path2D

null

需要绘制的Path2D。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Stroke {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.moveTo(25, 25)
  15. this.context.lineTo(25, 105)
  16. this.context.lineTo(75, 105)
  17. this.context.lineTo(75, 25)
  18. this.context.strokeStyle = 'rgb(0,0,255)'
  19. this.context.stroke()
  20. })
  21. }
  22. .width('100%')
  23. .height('100%')
  24. }
  25. }

beginPath

beginPath(): void

创建一个新的绘制路径。

从API version 9开始,该接口支持在ArkTS卡片中使用。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct BeginPath {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.lineWidth = 6
  16. this.context.strokeStyle = '#0000ff'
  17. this.context.moveTo(15, 80)
  18. this.context.lineTo(280, 160)
  19. this.context.stroke()
  20. })
  21. }
  22. .width('100%')
  23. .height('100%')
  24. }
  25. }

moveTo

moveTo(x: number, y: number): void

路径从当前点移动到指定点。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

说明

x

number

0

指定位置的x坐标。

y

number

0

指定位置的y坐标。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct MoveTo {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.moveTo(10, 10)
  16. this.context.lineTo(280, 160)
  17. this.context.stroke()
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

lineTo

lineTo(x: number, y: number): void

从当前点到指定点进行路径连接。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x

number

0

指定位置的x坐标。

y

number

0

指定位置的y坐标。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct LineTo {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.moveTo(10, 10)
  16. this.context.lineTo(280, 160)
  17. this.context.stroke()
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

closePath

closePath(): void

结束当前路径形成一个封闭路径。

从API version 9开始,该接口支持在ArkTS卡片中使用。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ClosePath {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.moveTo(30, 30)
  16. this.context.lineTo(110, 30)
  17. this.context.lineTo(70, 90)
  18. this.context.closePath()
  19. this.context.stroke()
  20. })
  21. }
  22. .width('100%')
  23. .height('100%')
  24. }
  25. }

createPattern

createPattern(image: ImageBitmap, repetition: string | null): CanvasPattern | null

通过指定图像和重复方式创建图片填充的模板。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

描述

image

ImageBitmap

图源对象,具体参考ImageBitmap对象。

repetition

string

设置图像重复的方式,取值为:'repeat'、'repeat-x'、&nbsp'repeat-y'、'no-repeat'。

默认值:''

返回值:

类型

说明

CanvasPattern

通过指定图像和重复方式创建图片填充的模板对象。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CreatePattern {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
  8. build() {
  9. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  10. Canvas(this.context)
  11. .width('100%')
  12. .height('100%')
  13. .backgroundColor('#ffff00')
  14. .onReady(() =>{
  15. var pattern = this.context.createPattern(this.img, 'repeat')
  16. this.context.fillStyle = pattern
  17. this.context.fillRect(0, 0, 200, 200)
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

bezierCurveTo

bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void

创建三次贝赛尔曲线的路径。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

cp1x

number

0

第一个贝塞尔参数的x坐标值。

cp1y

number

0

第一个贝塞尔参数的y坐标值。

cp2x

number

0

第二个贝塞尔参数的x坐标值。

cp2y

number

0

第二个贝塞尔参数的y坐标值。

x

number

0

路径结束时的x坐标值。

y

number

0

路径结束时的y坐标值。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct BezierCurveTo {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.moveTo(10, 10)
  16. this.context.bezierCurveTo(20, 100, 200, 100, 200, 20)
  17. this.context.stroke()
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

quadraticCurveTo

quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void

创建二次贝赛尔曲线的路径。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

cpx

number

0

贝塞尔参数的x坐标值。

cpy

number

0

贝塞尔参数的y坐标值。

x

number

0

路径结束时的x坐标值。

y

number

0

路径结束时的y坐标值。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct QuadraticCurveTo {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.moveTo(20, 20)
  16. this.context.quadraticCurveTo(100, 100, 200, 20)
  17. this.context.stroke()
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

arc

arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void

绘制弧线路径。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x

number

0

弧线圆心的x坐标值。

y

number

0

弧线圆心的y坐标值。

radius

number

0

弧线的圆半径。

startAngle

number

0

弧线的起始弧度。

endAngle

number

0

弧线的终止弧度。

counterclockwise

boolean

false

是否逆时针绘制圆弧。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Arc {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.arc(100, 75, 50, 0, 6.28)
  16. this.context.stroke()
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

arcTo

arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void

依据圆弧经过的点和圆弧半径创建圆弧路径。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x1

number

0

圆弧经过的第一个点的x坐标值。

y1

number

0

圆弧经过的第一个点的y坐标值。

x2

number

0

圆弧经过的第二个点的x坐标值。

y2

number

0

圆弧经过的第二个点的y坐标值。

radius

number

0

圆弧的圆半径值。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ArcTo {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.moveTo(100, 20)
  15. this.context.arcTo(150, 20, 150, 70, 50)
  16. this.context.stroke()
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

ellipse

ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void

在规定的矩形区域绘制一个椭圆。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

说明

x

number

0

椭圆圆心的x轴坐标。

y

number

0

椭圆圆心的y轴坐标。

radiusX

number

0

椭圆x轴的半径长度。

radiusY

number

0

椭圆y轴的半径长度。

rotation

number

0

椭圆的旋转角度,单位为弧度。

startAngle

number

0

椭圆绘制的起始点角度,以弧度表示。

endAngle

number

0

椭圆绘制的结束点角度,以弧度表示。

counterclockwise

boolean

false

是否以逆时针方向绘制椭圆。

true:逆时针方向绘制椭圆。

false:顺时针方向绘制椭圆。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CanvasExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.beginPath()
  15. this.context.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI * 2, false)
  16. this.context.stroke()
  17. this.context.beginPath()
  18. this.context.ellipse(200, 300, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI * 2, true)
  19. this.context.stroke()
  20. })
  21. }
  22. .width('100%')
  23. .height('100%')
  24. }
  25. }

rect

rect(x: number, y: number, w: number, h: number): void

创建矩形路径。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x

number

0

指定矩形的左上角x坐标值。

y

number

0

指定矩形的左上角y坐标值。

w

number

0

指定矩形的宽度。

h

number

0

指定矩形的高度。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CanvasExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20)
  15. this.context.stroke()
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

fill

fill(fillRule?: CanvasFillRule): void

对封闭路径进行填充。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

fillRule

CanvasFillRule

"nonzero"

指定要填充对象的规则。

可选参数为:"nonzero", "evenodd"。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Fill {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20)
  15. this.context.fill()
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

fill(path: Path2D, fillRule?: CanvasFillRule): void

对封闭路径进行填充。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

path

Path2D

 

Path2D填充路径。

fillRule

CanvasFillRule

"nonzero"

指定要填充对象的规则。

可选参数为:"nonzero", "evenodd"。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Fill {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. let region = new Path2D()
  15. region.moveTo(30, 90)
  16. region.lineTo(110, 20)
  17. region.lineTo(240, 130)
  18. region.lineTo(60, 130)
  19. region.lineTo(190, 20)
  20. region.lineTo(270, 90)
  21. region.closePath()
  22. // Fill path
  23. this.context.fillStyle = '#00ff00'
  24. this.context.fill(region, "evenodd")
  25. })
  26. }
  27. .width('100%')
  28. .height('100%')
  29. }
  30. }

clip

clip(fillRule?: CanvasFillRule): void

设置当前路径为剪切路径。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

fillRule

CanvasFillRule

"nonzero"

指定要剪切对象的规则。

可选参数为:"nonzero", "evenodd"。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Clip {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.rect(0, 0, 100, 200)
  15. this.context.stroke()
  16. this.context.clip()
  17. this.context.fillStyle = "rgb(255,0,0)"
  18. this.context.fillRect(0, 0, 200, 200)
  19. })
  20. }
  21. .width('100%')
  22. .height('100%')
  23. }
  24. }

clip(path: Path2D, fillRule?: CanvasFillRule): void

设置当前路径为剪切路径

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

path

Path2D

-

Path2D剪切路径。

fillRule

CanvasFillRule

"nonzero"

指定要剪切对象的规则。

可选参数为:"nonzero", "evenodd"。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Clip {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. let region = new Path2D()
  15. region.moveTo(30, 90)
  16. region.lineTo(110, 20)
  17. region.lineTo(240, 130)
  18. region.lineTo(60, 130)
  19. region.lineTo(190, 20)
  20. region.lineTo(270, 90)
  21. region.closePath()
  22. this.context.clip(region,"evenodd")
  23. this.context.fillStyle = "rgb(0,255,0)"
  24. this.context.fillRect(0, 0, this.context.width, this.context.height)
  25. })
  26. }
  27. .width('100%')
  28. .height('100%')
  29. }
  30. }

filter

filter(filter: string): void

为Canvas图形设置各类滤镜效果。该接口为空接口。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

说明

filter

string

-

接受各类滤镜效果的函数。

getTransform

getTransform(): Matrix2D

获取当前被应用到上下文的转换矩阵。该接口为空接口。

从API version 9开始,该接口支持在ArkTS卡片中使用。

resetTransform

resetTransform(): void

使用单位矩阵重新设置当前变形。该接口为空接口。

从API version 9开始,该接口支持在ArkTS卡片中使用。

direction

direction(direction: CanvasDirection): void

绘制文本时,描述当前文本方向的属性。该接口为空接口。

从API version 9开始,该接口支持在ArkTS卡片中使用。

rotate

rotate(angle: number): void

针对当前坐标轴进行顺时针旋转。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

angle

number

0

设置顺时针旋转的弧度值,可以通过Math.PI / 180将角度转换为弧度值。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Rotate {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.rotate(45 * Math.PI / 180)
  15. this.context.fillRect(70, 20, 50, 50)
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

scale

scale(x: number, y: number): void

设置canvas画布的缩放变换属性,后续的绘制操作将按照缩放比例进行缩放。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x

number

0

设置水平方向的缩放值。

y

number

0

设置垂直方向的缩放值。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Scale {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.lineWidth = 3
  15. this.context.strokeRect(30, 30, 50, 50)
  16. this.context.scale(2, 2) // Scale to 200%
  17. this.context.strokeRect(30, 30, 50, 50)
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

transform

transform(a: number, b: number, c: number, d: number, e: number, f: number): void

transform方法对应一个变换矩阵,想对一个图形进行变化的时候,只要设置此变换矩阵相应的参数,对图形的各个定点的坐标分别乘以这个矩阵,就能得到新的定点的坐标。矩阵变换效果可叠加。

从API version 9开始,该接口支持在ArkTS卡片中使用。

说明

变换后的坐标计算方式(x和y为变换前坐标,x'和y'为变换后坐标):

  • x' = scaleX * x + skewY * y + translateX

  • y' = skewX * x + scaleY * y + translateY

参数:

参数

类型

必填

默认值

描述

a

number

0

scaleX: 指定水平缩放值。

b

number

0

skewX: 指定水平倾斜值。

c

number

0

skewY: 指定垂直倾斜值。

d

number

0

scaleY: 指定垂直缩放值。

e

number

0

translateX: 指定水平移动值。

f

number

0

translateY: 指定垂直移动值。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Transform {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.fillStyle = 'rgb(0,0,0)'
  15. this.context.fillRect(0, 0, 100, 100)
  16. this.context.transform(1, 0.5, -0.5, 1, 10, 10)
  17. this.context.fillStyle = 'rgb(255,0,0)'
  18. this.context.fillRect(0, 0, 100, 100)
  19. this.context.transform(1, 0.5, -0.5, 1, 10, 10)
  20. this.context.fillStyle = 'rgb(0,0,255)'
  21. this.context.fillRect(0, 0, 100, 100)
  22. })
  23. }
  24. .width('100%')
  25. .height('100%')
  26. }
  27. }

setTransform

setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void

setTransform方法使用的参数和transform()方法相同,但setTransform()方法会重置现有的变换矩阵并创建新的变换矩阵。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

a

number

0

scaleX: 指定水平缩放值。

b

number

0

skewX: 指定水平倾斜值。

c

number

0

skewY: 指定垂直倾斜值。

d

number

0

scaleY: 指定垂直缩放值。

e

number

0

translateX: 指定水平移动值。

f

number

0

translateY: 指定垂直移动值。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct SetTransform {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.fillStyle = 'rgb(255,0,0)'
  15. this.context.fillRect(0, 0, 100, 100)
  16. this.context.setTransform(1,0.5, -0.5, 1, 10, 10)
  17. this.context.fillStyle = 'rgb(0,0,255)'
  18. this.context.fillRect(0, 0, 100, 100)
  19. })
  20. }
  21. .width('100%')
  22. .height('100%')
  23. }
  24. }

setTransform(transform?: Matrix2D): void

以Matrix2D对象为模板重置现有的变换矩阵并创建新的变换矩阵。该接口为空接口。

从API version 9开始,该接口支持在ArkTS卡片中使用。

translate

translate(x: number, y: number): void

移动当前坐标系的原点。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x

number

0

设置水平平移量。

y

number

0

设置竖直平移量。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Translate {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.fillRect(10, 10, 50, 50)
  15. this.context.translate(70, 70)
  16. this.context.fillRect(10, 10, 50, 50)
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

drawImage

drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number): void

drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number, dw: number, dh: number): void

drawImage(image: ImageBitmap | PixelMap, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number):void

进行图像绘制。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

image

ImageBitmapPixelMap

null

图片资源,请参考ImageBitmap或PixelMap。

sx

number

0

裁切源图像时距离源图像左上角的x坐标值。

sy

number

0

裁切源图像时距离源图像左上角的y坐标值。

sw

number

0

裁切源图像时需要裁切的宽度。

sh

number

0

裁切源图像时需要裁切的高度。

dx

number

0

绘制区域左上角在x轴的位置。

dy

number

0

绘制区域左上角在y 轴的位置。

dw

number

0

绘制区域的宽度。当绘制区域的宽度和裁剪图像的宽度不一致时,将图像宽度拉伸或压缩为绘制区域的宽度。

dh

number

0

绘制区域的高度。当绘制区域的高度和裁剪图像的高度不一致时,将图像高度拉伸或压缩为绘制区域的高度。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ImageExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. private img:ImageBitmap = new ImageBitmap("common/images/example.jpg")
  8. build() {
  9. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  10. Canvas(this.context)
  11. .width('100%')
  12. .height('100%')
  13. .backgroundColor('#ffff00')
  14. .onReady(() =>{
  15. this.context.drawImage( this.img,0,0,500,500,0,0,400,200)
  16. })
  17. }
  18. .width('100%')
  19. .height('100%')
  20. }
  21. }

createImageData

createImageData(sw: number, sh: number): ImageData

创建新的ImageData 对象,请参考ImageData

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认

描述

sw

number

0

ImageData的宽度。

sh

number

0

ImageData的高度。

createImageData(imageData: ImageData): ImageData

创建新的ImageData 对象,请参考ImageData

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认

描述

imagedata

ImageData

null

复制现有的ImageData对象。

返回值:

类型

说明

ImageData

新的ImageData对象。

getPixelMap

getPixelMap(sx: number, sy: number, sw: number, sh: number): PixelMap

以当前canvas指定区域内的像素创建PixelMap对象。

参数:

参数

类型

必填

默认值

描述

sx

number

0

需要输出的区域的左上角x坐标。

sy

number

0

需要输出的区域的左上角y坐标。

sw

number

0

需要输出的区域的宽度。

sh

number

0

需要输出的区域的高度。

返回值:

类型

说明

PixelMap

新的PixelMap对象。

getImageData

getImageData(sx: number, sy: number, sw: number, sh: number): ImageData

以当前canvas指定区域内的像素创建ImageData对象。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

sx

number

0

需要输出的区域的左上角x坐标。

sy

number

0

需要输出的区域的左上角y坐标。

sw

number

0

需要输出的区域的宽度。

sh

number

0

需要输出的区域的高度。

返回值:

类型

说明

ImageData

新的ImageData对象。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct GetImageData {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. private img:ImageBitmap = new ImageBitmap("/common/images/1234.png")
  8. build() {
  9. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  10. Canvas(this.context)
  11. .width('100%')
  12. .height('100%')
  13. .backgroundColor('#ffff00')
  14. .onReady(() =>{
  15. this.context.drawImage(this.img,0,0,130,130)
  16. var imagedata = this.context.getImageData(50,50,130,130)
  17. this.context.putImageData(imagedata,150,150)
  18. })
  19. }
  20. .width('100%')
  21. .height('100%')
  22. }
  23. }

putImageData

putImageData(imageData: ImageData, dx: number, dy: number): void

putImageData(imageData: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void

使用ImageData数据填充新的矩形区域。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

imagedata

ImageData

null

包含像素值的ImageData对象。

dx

number

0

填充区域在x轴方向的偏移量。

dy

number

0

填充区域在y轴方向的偏移量。

dirtyX

number

0

源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量。

dirtyY

number

0

源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量。

dirtyWidth

number

imagedata的宽度

源图像数据矩形裁切范围的宽度。

dirtyHeight

number

imagedata的高度

源图像数据矩形裁切范围的高度。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct PutImageData {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. var imageData = this.context.createImageData(100, 100)
  15. for (var i = 0; i < imageData.data.length; i += 4) {
  16. imageData.data[i + 0] = 255
  17. imageData.data[i + 1] = 0
  18. imageData.data[i + 2] = 255
  19. imageData.data[i + 3] = 255
  20. }
  21. this.context.putImageData(imageData, 10, 10)
  22. })
  23. }
  24. .width('100%')
  25. .height('100%')
  26. }
  27. }

setLineDash

setLineDash(segments: number[]): void

设置画布的虚线样式。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

描述

segments

number[]

描述线段如何交替和线段间距长度的数组。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct SetLineDash {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.arc(100, 75, 50, 0, 6.28)
  15. this.context.setLineDash([10,20])
  16. this.context.stroke()
  17. })
  18. }
  19. .width('100%')
  20. .height('100%')
  21. }
  22. }

getLineDash

getLineDash(): number[]

获得当前画布的虚线样式。

从API version 9开始,该接口支持在ArkTS卡片中使用。

返回值:

类型

说明

number[]

返回数组,该数组用来描述线段如何交替和间距长度。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CanvasGetLineDash {
  5. @State message: string = 'Hello World'
  6. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  7. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  8. build() {
  9. Row() {
  10. Column() {
  11. Text(this.message)
  12. .fontSize(50)
  13. .fontWeight(FontWeight.Bold)
  14. .onClick(()=>{
  15. console.error('before getlinedash clicked')
  16. let res = this.context.getLineDash()
  17. console.error(JSON.stringify(res))
  18. })
  19. Canvas(this.context)
  20. .width('100%')
  21. .height('100%')
  22. .backgroundColor('#ffff00')
  23. .onReady(() => {
  24. this.context.arc(100, 75, 50, 0, 6.28)
  25. this.context.setLineDash([10,20])
  26. this.context.stroke()
  27. let res = this.context.getLineDash()
  28. })
  29. }
  30. .width('100%')
  31. }
  32. .height('100%')
  33. }
  34. }

imageSmoothingQuality

imageSmoothingQuality(quality: imageSmoothingQuality)

用于设置图像平滑度。该接口为空接口。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

描述

quality

imageSmoothingQuality

支持如下三种类型:'low', 'medium', 'high'。

transferFromImageBitmap

transferFromImageBitmap(bitmap: ImageBitmap): void

显示给定的ImageBitmap对象。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

描述

bitmap

ImageBitmap

待显示的ImageBitmap对象。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct TransferFromImageBitmap {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings)
  8. build() {
  9. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  10. Canvas(this.context)
  11. .width('100%')
  12. .height('100%')
  13. .backgroundColor('#ffff00')
  14. .onReady(() =>{
  15. var imageData = this.offContext.createImageData(100, 100)
  16. for (var i = 0; i < imageData.data.length; i += 4) {
  17. imageData.data[i + 0] = 255
  18. imageData.data[i + 1] = 0
  19. imageData.data[i + 2] = 255
  20. imageData.data[i + 3] = 255
  21. }
  22. this.offContext.putImageData(imageData, 10, 10)
  23. var image = this.offContext.transferToImageBitmap()
  24. this.context.transferFromImageBitmap(image)
  25. })
  26. }
  27. .width('100%')
  28. .height('100%')
  29. }
  30. }

toDataURL

toDataURL(type?: string, quality?: number): string

生成一个包含图片展示的URL。

从API version 9开始,该接口支持在ArkTS卡片中使用。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名

参数类型

必填

默认值

描述

type

string

"image/png"

可选参数,用于指定图像格式,默认格式为image/png。

quality

number

0.92

在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量。如果超出取值范围,将会使用默认值0.92。

返回值:

类型

说明

string

图像的URL地址。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CanvasExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. @State toDataURL: string = ""
  8. build() {
  9. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  10. Canvas(this.context)
  11. .width(100)
  12. .height(100)
  13. .onReady(() =>{
  14. this.context.fillStyle = "#00ff00"
  15. this.context.fillRect(0,0,100,100)
  16. this.toDataURL = this.context.toDataURL("image/png", 0.92)
  17. })
  18. Text(this.toDataURL)
  19. }
  20. .width('100%')
  21. .height('100%')
  22. .backgroundColor('#ffff00')
  23. }
  24. }

restore

restore(): void

对保存的绘图上下文进行恢复。

从API version 9开始,该接口支持在ArkTS卡片中使用。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CanvasExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.save() // save the default state
  15. this.context.fillStyle = "#00ff00"
  16. this.context.fillRect(20, 20, 100, 100)
  17. this.context.restore() // restore to the default state
  18. this.context.fillRect(150, 75, 100, 100)
  19. })
  20. }
  21. .width('100%')
  22. .height('100%')
  23. }
  24. }

save

save(): void

将当前状态放入栈中,保存canvas的全部状态,通常在需要保存绘制状态时调用。

从API version 9开始,该接口支持在ArkTS卡片中使用。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CanvasExample {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. this.context.save() // save the default state
  15. this.context.fillStyle = "#00ff00"
  16. this.context.fillRect(20, 20, 100, 100)
  17. this.context.restore() // restore to the default state
  18. this.context.fillRect(150, 75, 100, 100)
  19. })
  20. }
  21. .width('100%')
  22. .height('100%')
  23. }
  24. }

createLinearGradient

createLinearGradient(x0: number, y0: number, x1: number, y1: number): void

创建一个线性渐变色。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x0

number

0

起点的x轴坐标。

y0

number

0

起点的y轴坐标。

x1

number

0

终点的x轴坐标。

y1

number

0

终点的y轴坐标。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CreateLinearGradient {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. var grad = this.context.createLinearGradient(50,0, 300,100)
  15. grad.addColorStop(0.0, '#ff0000')
  16. grad.addColorStop(0.5, '#ffffff')
  17. grad.addColorStop(1.0, '#00ff00')
  18. this.context.fillStyle = grad
  19. this.context.fillRect(0, 0, 400, 400)
  20. })
  21. }
  22. .width('100%')
  23. .height('100%')
  24. }
  25. }

createRadialGradient

createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): void

创建一个径向渐变色。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数

类型

必填

默认值

描述

x0

number

0

起始圆的x轴坐标。

y0

number

0

起始圆的y轴坐标。

r0

number

0

起始圆的半径。必须是非负且有限的。

x1

number

0

终点圆的x轴坐标。

y1

number

0

终点圆的y轴坐标。

r1

number

0

终点圆的半径。必须为非负且有限的。

示例:

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct CreateRadialGradient {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true)
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  7. build() {
  8. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  9. Canvas(this.context)
  10. .width('100%')
  11. .height('100%')
  12. .backgroundColor('#ffff00')
  13. .onReady(() =>{
  14. var grad = this.context.createRadialGradient(200,200,50, 200,200,200)
  15. grad.addColorStop(0.0, '#ff0000')
  16. grad.addColorStop(0.5, '#ffffff')
  17. grad.addColorStop(1.0, '#00ff00')
  18. this.context.fillStyle = grad
  19. this.context.fillRect(0, 0, 400, 400)
  20. })
  21. }
  22. .width('100%')
  23. .height('100%')
  24. }
  25. }

CanvasPattern

一个Object对象, 通过createPattern方法创建。

从API version 9开始,该接口支持在ArkTS卡片中使用。

CanvasDirection

从API version 9开始,该接口支持在ArkTS卡片中使用。

名称

描述

inherit

继承canvas组件已设定的文本方向。

ltr

从左往右。

rtl

从右往左。

CanvasFillRule

从API version 9开始,该接口支持在ArkTS卡片中使用。

名称

描述

evenodd

奇偶规则。

nonzero

非零规则。

CanvasLineCap

从API version 9开始,该接口支持在ArkTS卡片中使用。

名称

描述

butt

线条两端为平行线,不额外扩展。

round

在线条两端延伸半个圆,直径等于线宽。

square

在线条两端延伸一个矩形,宽度等于线宽的一半,高度等于线宽。

CanvasLineJoin

从API version 9开始,该接口支持在ArkTS卡片中使用。

名称

描述

bevel

在线段相连处使用三角形为底填充, 每个部分矩形拐角独立。

miter

在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。

round

在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。

CanvasTextAlign

从API version 9开始,该接口支持在ArkTS卡片中使用。

名称

描述

center

文本居中对齐。

start

文本对齐界线开始的地方。

end

文本对齐界线结束的地方。

left

文本左对齐。

right

文本右对齐。

CanvasTextBaseline

从API version 9开始,该接口支持在ArkTS卡片中使用。

名称

描述

alphabetic

文本基线是标准的字母基线。

bottom

文本基线在文本块的底部。 与ideographic基线的区别在于ideographic基线不需要考虑下行字母。

hanging

文本基线是悬挂基线。

ideographic

文字基线是表意字基线;如果字符本身超出了alphabetic基线,那么ideograhpic基线位置在字符本身的底部。

middle

文本基线在文本块的中间。

top

文本基线在文本块的顶部。

ImageSmoothingQuality

从API version 9开始,该接口支持在ArkTS卡片中使用。

名称

描述

low

低画质

medium

中画质

high

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号