• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 绑定手势方法
2
3
4通过给各个组件绑定不同的手势事件,并设计事件的响应方式,当手势识别成功时,ArkUI框架将通过事件回调通知组件手势识别的结果。
5
6
7## gesture(常规手势绑定方法)
8
9
10```ts
11.gesture(gesture: GestureType, mask?: GestureMask)
12```
13
14gesture为通用的一种手势绑定方法,可以将手势绑定到对应的组件上。
15
16例如,可以将点击手势TapGesture通过gesture手势绑定方法绑定到Text组件上。
17
18
19```ts
20// xxx.ets
21@Entry
22@Component
23struct Index {
24  build() {
25    Column() {
26      Text('Gesture').fontSize(28)
27        // 采用gesture手势绑定方法绑定TapGesture
28        .gesture(
29          TapGesture()
30            .onAction(() => {
31              console.info('TapGesture is onAction');
32            }))
33    }
34    .height(200)
35    .width(250)
36  }
37}
38```
39
40
41## priorityGesture(带优先级的手势绑定方法)
42
43
44```ts
45.priorityGesture(gesture: GestureType, mask?: GestureMask)
46```
47
48priorityGesture是带优先级的手势绑定方法,可以在组件上绑定优先识别的手势。
49
50在默认情况下,当父组件和子组件使用gesture绑定同类型的手势时,子组件优先识别通过gesture绑定的手势。当父组件使用priorityGesture绑定与子组件同类型的手势时,父组件优先识别通过priorityGesture绑定的手势。
51
52例如,当父组件Column和子组件Text同时绑定TapGesture手势时,父组件以带优先级手势priorityGesture的形式进行绑定时,优先响应父组件绑定的TapGesture。
53
54
55
56```ts
57// xxx.ets
58@Entry
59@Component
60struct Index {
61  build() {
62    Column() {
63      Text('Gesture').fontSize(28)
64        .gesture(
65          TapGesture()
66            .onAction(() => {
67              console.info('Text TapGesture is onAction');
68            }))
69    }
70    .height(200)
71    .width(250)
72    // 设置为priorityGesture时,点击文本区域会忽略Text组件的TapGesture手势事件,优先响应父组件Column的TapGesture手势事件
73    .priorityGesture(
74      TapGesture()
75        .onAction(() => {
76          console.info('Column TapGesture is onAction');
77        }), GestureMask.IgnoreInternal)
78  }
79}
80```
81
82
83## parallelGesture(并行手势绑定方法)
84
85
86```ts
87.parallelGesture(gesture: GestureType, mask?: GestureMask)
88```
89
90parallelGesture是并行的手势绑定方法,可以在父子组件上绑定可以同时响应的相同手势。
91
92在默认情况下,手势事件为非冒泡事件,当父子组件绑定相同的手势时,父子组件绑定的手势事件会发生竞争,最多只有一个组件的手势事件能够获得响应。而当父组件绑定了并行手势parallelGesture时,父子组件相同的手势事件都可以触发,实现类似冒泡效果。
93
94
95
96```ts
97// xxx.ets
98@Entry
99@Component
100struct Index {
101  build() {
102    Column() {
103      Text('Gesture').fontSize(28)
104        .gesture(
105          TapGesture()
106            .onAction(() => {
107              console.info('Text TapGesture is onAction');
108            }))
109    }
110    .height(200)
111    .width(250)
112    // 设置为parallelGesture时,点击文本区域会同时响应父组件Column和子组件Text的TapGesture手势事件
113    .parallelGesture(
114      TapGesture()
115        .onAction(() => {
116          console.info('Column TapGesture is onAction');
117        }), GestureMask.IgnoreInternal)
118  }
119}
120```
121
122
123>**说明:**
124>
125>当父组件和子组件同时绑定单击手势事件和双击手势事件时,父组件和子组件均只响应单击手势事件。
126