HarmonyOS API:画布组件
版本:v3.1 Beta
Canvas
更新时间: 2023-02-17 09:19
提供画布组件,用于自定义绘制图形。
说明
该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
子组件
不支持。
接口
Canvas(context?: CanvasRenderingContext2D)
参数:
参数名  | 参数类型  | 必填  | 默认值  | 参数描述  | 
context  | 否  | -  | 见CanvasRenderingContext2D对象。  | 
属性
支持通用属性。
事件
除支持通用事件外,还支持如下事件:
名称  | 参数  | 描述  | 
onReady(event: () => void)  | 无  | Canvas组件初始化完成时的事件回调,该事件之后Canvas组件宽高确定且可获取,可使用Canvas相关API进行绘制。  | 
示例:
// xxx.ets
@Entry
@Component
struct CanvasExample {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() => {
          this.context.fillRect(0, 30, 100, 100)
        })
    }
    .width('100%')
    .height('100%')
  }
}
CanvasGradient对象
更新时间: 2023-02-17 09:19
渐变对象。
说明
从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
addColorStop
addColorStop(offset: number, color: string): void
设置渐变断点值,包括偏移和颜色。
参数:
参数  | 类型  | 必填  | 默认值  | 描述  | 
offset  | number  | 是  | 0  | 设置渐变点距离起点的位置占总体长度的比例,范围为0到1。  | 
color  | string  | 是  | '#ffffff'  | 设置渐变的颜色。  | 
示例:
// xxx.ets
@Entry
@Component
struct Page45 {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
build() {
  Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
    Canvas(this.context)
      .width('100%')
      .height('100%')
      .backgroundColor('#ffff00')
      .onReady(() => {
        var grad = this.context.createLinearGradient(50, 0, 300, 100)
        grad.addColorStop(0.0, 'red')
        grad.addColorStop(0.5, 'white')
        grad.addColorStop(1.0, 'green')
        this.context.fillStyle = grad
        this.context.fillRect(0, 0, 500, 500)
      })
  }
  .width('100%')
  .height('100%')
}
}
ImageBitmap对象
更新时间: 2023-02-17 09:19
ImageBitmap对象可以存储canvas渲染的像素数据。
说明
从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
属性
属性  | 类型  | 描述  | 
width  | number  | ImageBitmap的像素宽度。  | 
height  | number  | ImageBitmap的像素高度。  | 
示例:
// xxx.ets
@Entry
@Component
struct ImageExample {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  private img:ImageBitmap = new ImageBitmap("common/images/example.jpg")
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.drawImage( this.img,0,0,500,500,0,0,400,200)
      })
    }
    .width('100%')
    .height('100%')
  }
}
方法
close
close()
释放ImageBitmap对象相关联的所有图形资源。该接口为空接口。
ImageData对象
更新时间: 2023-02-17 09:19
ImageData对象可以存储canvas渲染的像素数据。
说明
从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
属性
属性  | 类型  | 描述  | 
width  | number  | 矩形区域实际像素宽度,单位为px。  | 
height  | number  | 矩形区域实际像素高度,单位为px。  | 
data  | Uint8ClampedArray  | 一维数组,保存了相应的颜色数据,数据值范围为0到255。  | 
说明
可使用px2vp接口进行单位转换。
示例:
// xxx.ets
@Entry
@Component
struct Translate {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private img:ImageBitmap = new ImageBitmap("/common/images/1234.png")
build() {
  Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
    Canvas(this.context)
      .width('100%')
      .height('100%')
      .backgroundColor('#ffff00')
      .onReady(() =>{
        this.context.drawImage(this.img,0,0,130,130)
        var imagedata = this.context.getImageData(50,50,130,130)
        this.context.putImageData(imagedata,150,150)
      })
  }
  .width('100%')
  .height('100%')
}
}




















