• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 焦点轴事件
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @jiangtao92-->
5<!--Designer: @piggyguy-->
6<!--Tester: @songyanhong-->
7<!--Adviser: @HelloCrease-->
8
9焦点轴事件是指在与游戏手柄交互时,通过十字按键或者操作杆上报的轴事件,此轴事件通过获得焦点的组件分发并回调给应用。若组件默认可获焦,如Button,则不需要额外设置属性。若组件在默认情况下不可获焦,如Text和Image,可以通过将focusable属性设置为true来启用焦点轴事件。
10
11>  **说明:**
12>
13>  从API version 15开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14
15## onFocusAxisEvent
16
17onFocusAxisEvent(event: Callback\<FocusAxisEvent>): T
18
19给组件绑定焦点轴事件回调。绑定该方法的组件获焦后,游戏手柄上的摇杆、十字键等的操作会触发该回调。
20
21**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
22
23**系统能力:** SystemCapability.ArkUI.ArkUI.Full
24
25**参数:**
26
27| 参数名 | 类型                          | 必填 | 说明               |
28| ------ | ----------------------------- | ---- | ------------------ |
29| event  | Callback\<[FocusAxisEvent](#focusaxisevent对象说明)> | 是   | 焦点轴事件回调。 |
30
31**返回值:**
32
33| 类型 | 说明 |
34| -------- | -------- |
35| T | 返回当前组件。 |
36
37## FocusAxisEvent对象说明
38
39焦点轴事件的对象说明,继承于[BaseEvent](ts-gesture-customize-judge.md#baseevent8)。
40
41**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
42
43**系统能力:** SystemCapability.ArkUI.ArkUI.Full
44
45| 名称                                      | 类型                  | 只读    |  可选   |         说明                 |
46| ------------------------------------- | ---------------------------------------     | ------------- | ------------- | ------------------------- |
47| axisMap                               | Map<[AxisModel](ts-appendix-enums.md#axismodel15), number>      |  否    |  否     | 焦点轴事件的轴值表。          |
48| stopPropagation                       | Callback\<void>                      |     否         |  否     |阻塞[事件冒泡](../../../ui/arkts-interaction-basic-principles.md#事件冒泡)传递。            |
49
50## 示例
51
52该示例通过按钮设置了焦点轴事件,当按钮获得焦点时,操控游戏手柄的十字按键或者操作杆将触发onFocusAxisEvent回调。
53
54```ts
55// xxx.ets
56@Entry
57@Component
58struct FocusAxisEventExample {
59  @State text: string = ''
60  @State axisValue: string = ''
61
62  aboutToAppear(): void {
63    this.getUIContext().getFocusController().activate(true)
64  }
65
66  aboutToDisappear(): void {
67    this.getUIContext().getFocusController().activate(false)
68  }
69
70  build() {
71    Column() {
72      Button('FocusAxisEvent')
73        .defaultFocus(true)
74        .onFocusAxisEvent((event: FocusAxisEvent) => {
75          let absX = event.axisMap.get(AxisModel.ABS_X);
76          let absY = event.axisMap.get(AxisModel.ABS_Y);
77          let absZ = event.axisMap.get(AxisModel.ABS_Z);
78          let absRz = event.axisMap.get(AxisModel.ABS_RZ);
79          let absGas = event.axisMap.get(AxisModel.ABS_GAS);
80          let absBrake = event.axisMap.get(AxisModel.ABS_BRAKE);
81          let absHat0X = event.axisMap.get(AxisModel.ABS_HAT0X);
82          let absHat0Y = event.axisMap.get(AxisModel.ABS_HAT0Y);
83          this.axisValue = 'absX: ' + absX + '; absY: ' + absY + '; absZ: ' + absZ + '; absRz: ' + absRz + '; absGas: ' + absGas + '; absBrake: ' + absBrake + '; absHat0X: ' + absHat0X + '; absHat0Y: ' + absHat0Y;
84          this.text = JSON.stringify(event);
85        })
86      Text(this.axisValue).padding(15)
87      Text(this.text).padding(15)
88    }.height(300).width('100%').padding(35)
89  }
90}
91```
92
93游戏手柄摇杆移动时:
94
95![onFocusAxisEvent](figures/onFocusAxisEvent.png)
96