ts-components-canvas-canvaspattern.md 2.4 KB
Newer Older
L
limeng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# CanvasPattern

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

>  **说明:**
>
>  从 API Version 8 开始支持。从API version 9开始,该接口支持在ArkTS卡片中使用。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

## 接口

### setTransform

setTransform(transform?: Matrix2D): void;

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

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

**参数:**

| 参数      | 类型                                                      | 必填 | 默认值 | 描述       |
| --------- | --------------------------------------------------------- | ---- | ------ | ---------- |
| transform | [Matrix2D](ts-components-canvas-matrix2d.md#Matrix2D对象) | 否   | null   | 转换矩阵。 |

L
limeng 已提交
25
**示例:**
L
limeng 已提交
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

```typescript
// 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")
  private pattern : CanvasPattern

  build() {
      Column() {
        Button("Click to set transform")
          .onClick(() => {
            this.matrix.scaleY = 1
            this.matrix.scaleX = 1
            this.matrix.translateX = 50
            this.matrix.translateY = 200
            this.pattern.setTransform(this.matrix)
            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.context.fillStyle = this.pattern
            this.matrix.scaleY = 0.5
            this.matrix.scaleX = 0.5
            this.matrix.translateX = 50
            this.matrix.translateY = 50
            this.pattern.setTransform(this.matrix)
            this.context.fillRect(0, 0, 480, 720)
          })
      }
      .width('100%')
      .height('100%')
  }
}
```

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