ts-components-canvas-canvaspattern.md 2.5 KB
Newer Older
L
limeng 已提交
1 2 3 4 5 6
# CanvasPattern

一个Object对象,使用[createPattern](ts-canvasrenderingcontext2d.md#createpattern)方法创建,通过指定图像和重复方式创建图片填充的模板。

>  **说明:**
>
L
limeng 已提交
7
>  从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
L
limeng 已提交
8

L
limeng 已提交
9
## 方法
L
limeng 已提交
10 11 12

### setTransform

L
limeng 已提交
13
setTransform(transform?: Matrix2D): void
L
limeng 已提交
14 15 16 17 18 19 20

使用Matrix2D对象作为参数、对当前CanvasPattern进行矩阵变换。

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

**参数:**

L
limeng 已提交
21 22 23
| 参数      | 类型                                                  | 必填 | 默认值 | 描述       |
| --------- | ----------------------------------------------------- | ---- | ------ | ---------- |
| transform | [Matrix2D](ts-components-canvas-matrix2d.md#Matrix2D) | 否   | null   | 转换矩阵。 |
L
limeng 已提交
24

L
limeng 已提交
25
**示例:**
L
limeng 已提交
26

L
limeng 已提交
27
```ts
L
limeng 已提交
28 29 30 31 32 33 34 35
// xxx.ets
@Entry
@Component
struct CanvasPatternPage {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  private matrix: Matrix2D = new Matrix2D()
  private img: ImageBitmap = new ImageBitmap("common/pattern.jpg")
L
liuliu 已提交
36
  private pattern : CanvasPattern | null = null
L
limeng 已提交
37 38 39 40 41 42 43 44 45

  build() {
      Column() {
        Button("Click to set transform")
          .onClick(() => {
            this.matrix.scaleY = 1
            this.matrix.scaleX = 1
            this.matrix.translateX = 50
            this.matrix.translateY = 200
L
liuliu 已提交
46 47 48
            if (this.pattern) {
              this.pattern.setTransform(this.matrix)
            }
L
limeng 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62
            this.context.fillRect(0, 0, 480, 720)
          })
          .width("45%")
          .margin("5px")
        Canvas(this.context)
          .width('100%')
          .height('80%')
          .backgroundColor('#FFFFFF')
          .onReady(() => {
            this.pattern = this.context.createPattern(this.img, 'no-repeat')
            this.matrix.scaleY = 0.5
            this.matrix.scaleX = 0.5
            this.matrix.translateX = 50
            this.matrix.translateY = 50
L
liuliu 已提交
63 64 65 66
            if (this.pattern) {
              this.context.fillStyle = this.pattern
              this.pattern.setTransform(this.matrix)
            }
L
limeng 已提交
67 68 69 70 71 72 73 74 75
            this.context.fillRect(0, 0, 480, 720)
          })
      }
      .width('100%')
      .height('100%')
  }
}
```

L
limeng 已提交
76 77
![CanvasPattern](./figures/canvas_pattern.gif)