harmony 鸿蒙Matrix2D
Matrix2D
Matrix2D allows you to perform matrix transformation, such as scaling, rotating, and translating.
NOTE
The APIs of this module are supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version.
APIs
Matrix2D(unit?: LengthMetricsUnit)
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
unit12+ | LengthMetricsUnit | No | Unit mode of the Matrix2D object. The value cannot be dynamically changed once set. The configuration method is the same as that of CanvasRenderingContext2D. Default value: DEFAULT |
Attributes
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Name | Type | Read Only | Optional | Description |
---|---|---|---|---|
scaleX | number | No | Yes | Horizontal scale factor. |
scaleY | number | No | Yes | Vertical scale factor. |
rotateX | number | No | Yes | Horizontal tilt coefficient. |
rotateY | number | No | Yes | Vertical tilt coefficient. |
translateX | number | No | Yes | Distance to translate on the x-axis. Default unit: vp. |
translateY | number | No | Yes | Distance to translate on the y-axis. Default unit: vp. |
NOTE
You can use the px2vp API to convert the unit.
Example
// xxx.ets
@Entry
@Component
struct Parameter {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private matrix: Matrix2D = new Matrix2D()
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('240vp')
.height('180vp')
.backgroundColor('#ffff00')
.onReady(() => {
this.context.fillRect(100, 20, 50, 50)
this.matrix.scaleX = 1
this.matrix.scaleY = 1
this.matrix.rotateX = -0.5
this.matrix.rotateY = 0.5
this.matrix.translateX = 10
this.matrix.translateY = 10
this.context.setTransform(this.matrix)
this.context.fillRect(100, 20, 50, 50)
})
}
.width('100%')
.height('100%')
}
}
Methods
identity
identity(): Matrix2D
Creates an identity matrix.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Return value
Type | Description |
---|---|
Matrix2D | Identity matrix. |
Example
// xxx.ets
@Entry
@Component
struct Identity {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private matrix: Matrix2D = new Matrix2D()
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('240vp')
.height('180vp')
.backgroundColor('#ffff00')
.onReady(() => {
this.context.fillRect(100, 20, 50, 50)
this.matrix = this.matrix.identity()
this.context.setTransform(this.matrix)
this.context.fillRect(100, 100, 50, 50)
})
}
.width('100%')
.height('100%')
}
}
invert
invert(): Matrix2D
Obtains an inverse of this matrix.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Return value
Type | Description |
---|---|
Matrix2D | Inverse of the current matrix. |
Example
// xxx.ets
@Entry
@Component
struct Invert {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private matrix: Matrix2D = new Matrix2D()
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('240vp')
.height('180vp')
.backgroundColor('#ffff00')
.onReady(() => {
this.context.fillRect(100, 110, 50, 50)
this.matrix.scaleX = 1
this.matrix.scaleY = 1
this.matrix.rotateX = -0.5
this.matrix.rotateY = 0.5
this.matrix.translateX = 10
this.matrix.translateY = 10
this.matrix.invert()
this.context.setTransform(this.matrix)
this.context.fillRect(100, 110, 50, 50)
})
}
.width('100%')
.height('100%')
}
}
multiply(deprecated)
multiply(other?: Matrix2D): Matrix2D
Multiplies this matrix by the target matrix.
Widget capability: This API can be used in ArkTS widgets since API version 9. This API is an empty API.
This API is deprecated since API version 10, and does not provide any actual rendering effects. Therefore, no examples are provided.
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
other | Matrix2D | No | Target matrix. Default value: null |
Return value
Type | Description |
---|---|
Matrix2D | Matrix of the multiplication result. |
rotate(deprecated)
rotate(rx?: number, ry?: number): Matrix2D
Performs a rotation operation on this matrix.
Widget capability: This API can be used in ArkTS widgets since API version 9. This API is an empty API.
This API is deprecated since API version 10. You are advised to use rotate instead.
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
rx | number | No | Horizontal coordinate of the rotation point. Default unit: vp. |
ry | number | No | Vertical coordinate of the rotation point. Default unit: vp. |
Return value
Type | Description |
---|---|
Matrix2D | Matrix of the rotation result. |
Example
// xxx.ets
@Entry
@Component
struct Rotate {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private matrix: Matrix2D = new Matrix2D()
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('240vp')
.height('180vp')
.backgroundColor('#ffff00')
.onReady(() => {
this.context.fillRect(50, 110, 50, 50)
this.matrix.scaleX = 1
this.matrix.scaleY = 1
this.matrix.rotateX = -0.5
this.matrix.rotateY = 0.5
this.matrix.translateX = 10
this.matrix.translateY = 10
this.matrix.rotate(5, 5)
this.context.setTransform(this.matrix)
this.context.fillRect(50, 110, 50, 50)
})
}
.width('100%')
.height('100%')
}
}
rotate10+
rotate(degree: number, rx?: number, ry?: number): Matrix2D
Performs a right multiplication rotation operation on this matrix, with the specified rotation point as the transform origin.
Widget capability: This API can be used in ArkTS widgets since API version 10.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
degree | number | Yes | Rotation angle. Positive angles represent clockwise rotation. You can convert the angle to radians using the following formula: degree * Math.PI/180. Default unit: radian. |
rx | number | No | Horizontal coordinate of the rotation point. Default unit: vp. Default value: 0 |
ry | number | No | Vertical coordinate of the rotation point. Default unit: vp. Default value: 0 |
Return value
Type | Description |
---|---|
Matrix2D | Matrix of the rotation result. |
Example
// xxx.ets
@Entry
@Component
struct Rotate {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private matrix: Matrix2D = new Matrix2D()
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('240vp')
.height('180vp')
.backgroundColor('#ffff00')
.onReady(() => {
this.context.fillRect(60, 80, 50, 50)
this.matrix.scaleX = 1
this.matrix.scaleY = 1
this.matrix.rotateX = -0.5
this.matrix.rotateY = 0.5
this.matrix.translateX = 10
this.matrix.translateY = 10
this.matrix.rotate(-60 * Math.PI / 180, 5, 5)
this.context.setTransform(this.matrix)
this.context.fillRect(60, 80, 50, 50)
})
}
.width('100%')
.height('100%')
}
}
translate
translate(tx?: number, ty?: number): Matrix2D
Performs a left multiplication translation operation on this matrix.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
Name | Type | Mandatory | Description |
---|---|---|---|
tx | number | No | Distance to translate on the X axis. Default unit: vp. Default value: 0 |
ty | number | No | Distance to translate on the Y axis. Default unit: vp. Default value: 0 |
Return value
Type | Description |
---|---|
Matrix2D | Matrix of the translation result. |
Example
// xxx.ets
@Entry
@Component
struct Translate {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private matrix: Matrix2D = new Matrix2D()
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('240vp')
.height('180vp')
.backgroundColor('#ffff00')
.onReady(() => {
this.context.fillRect(40, 20, 50, 50)
this.matrix.scaleX = 1
this.matrix.scaleY = 1
this.matrix.rotateX = 0
this.matrix.rotateY = 0
this.matrix.translateX = 0
this.matrix.translateY = 0
this.matrix.translate(100, 100)
this.context.setTransform(this.matrix)
this.context.fillRect(40, 20, 50, 50)
})
}
.width('100%')
.height('100%')
}
}
scale
scale(sx?: number, sy?: number): Matrix2D
Performs a right multiplication scaling operation on this matrix.
Widget capability: This API can be used in ArkTS widgets since API version 9.
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.ArkUI.ArkUI.Full
Parameters
Parameter | Type | Mandatory | Description |
---|---|---|---|
sx | number | No | Horizontal scale factor. Default value: 1.0. |
sy | number | No | Vertical scale factor. Default value: 1.0. |
Return value
Type | Description |
---|---|
Matrix2D | Matrix of the scale result. |
Example
// xxx.ets
@Entry
@Component
struct Scale {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private matrix: Matrix2D = new Matrix2D()
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('240vp')
.height('180vp')
.backgroundColor('#ffff00')
.onReady(() => {
this.context.fillRect(120, 70, 50, 50)
this.matrix.scaleX = 1
this.matrix.scaleY = 1
this.matrix.rotateX = -0.5
this.matrix.rotateY = 0.5
this.matrix.translateX = 10
this.matrix.translateY = 10
this.matrix.scale(0.5, 0.5)
this.context.setTransform(this.matrix)
this.context.fillRect(120, 70, 50, 50)
})
}
.width('100%')
.height('100%')
}
}
你可能感兴趣的鸿蒙文章
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦