ts-gesture-settings.md 9.6 KB
Newer Older
Z
zengyawen 已提交
1
# 绑定手势方法<a name="ZH-CN_TOPIC_0000001237555115"></a>
Z
zengyawen 已提交
2

Z
zengyawen 已提交
3 4
>![](../../public_sys-resources/icon-note.gif) **说明:** 
>从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
5

Z
zengyawen 已提交
6 7 8 9 10 11 12 13 14
## 权限列表<a name="section781125411508"></a>



## 绑定手势识别<a name="section42396384106"></a>

通过如下属性给组件绑定手势识别,手势识别成功后可以通过事件回调通知组件。

<table><thead align="left"><tr><th class="cellrowborder" valign="top" width="18.108189181081894%" id="mcps1.1.5.1.1"><p>名称</p>
Z
zengyawen 已提交
15
</th>
Z
zengyawen 已提交
16
<th class="cellrowborder" valign="top" width="20.73792620737926%" id="mcps1.1.5.1.2"><p>参数类型</p>
Z
zengyawen 已提交
17
</th>
Z
zengyawen 已提交
18
<th class="cellrowborder" valign="top" width="22.617738226177384%" id="mcps1.1.5.1.3"><p>默认值</p>
Z
zengyawen 已提交
19
</th>
Z
zengyawen 已提交
20
<th class="cellrowborder" valign="top" width="38.53614638536146%" id="mcps1.1.5.1.4"><p>描述</p>
Z
zengyawen 已提交
21 22 23
</th>
</tr>
</thead>
Z
zengyawen 已提交
24
<tbody><tr><td class="cellrowborder" valign="top" width="18.108189181081894%" headers="mcps1.1.5.1.1 "><p>gesture</p>
Z
zengyawen 已提交
25
</td>
Z
zengyawen 已提交
26 27
<td class="cellrowborder" valign="top" width="20.73792620737926%" headers="mcps1.1.5.1.2 "><p>gesture: <a href="#li13550165717410">GestureType</a>,</p>
<p>mask?: <a href="#li05419551143">GestureMask</a></p>
Z
zengyawen 已提交
28
</td>
Z
zengyawen 已提交
29 30
<td class="cellrowborder" valign="top" width="22.617738226177384%" headers="mcps1.1.5.1.3 "><p>gesture: -,</p>
<p>mask: GestureMask.Normal</p>
Z
zengyawen 已提交
31
</td>
Z
zengyawen 已提交
32 33
<td class="cellrowborder" valign="top" width="38.53614638536146%" headers="mcps1.1.5.1.4 "><p>绑定手势识别。</p>
<p>gesture: 绑定的手势类型, mask: 事件响应设置。</p>
Z
zengyawen 已提交
34 35
</td>
</tr>
Z
zengyawen 已提交
36
<tr><td class="cellrowborder" valign="top" width="18.108189181081894%" headers="mcps1.1.5.1.1 "><p>priorityGesture</p>
Z
zengyawen 已提交
37
</td>
Z
zengyawen 已提交
38 39
<td class="cellrowborder" valign="top" width="20.73792620737926%" headers="mcps1.1.5.1.2 "><p>gesture: <a href="#li13550165717410">GestureType</a>,</p>
<p>mask?: <a href="#li05419551143">GestureMask</a></p>
Z
zengyawen 已提交
40
</td>
Z
zengyawen 已提交
41 42
<td class="cellrowborder" valign="top" width="22.617738226177384%" headers="mcps1.1.5.1.3 "><p>gesture: -,</p>
<p>mask: GestureMask.Normal</p>
Z
zengyawen 已提交
43
</td>
Z
zengyawen 已提交
44 45 46
<td class="cellrowborder" valign="top" width="38.53614638536146%" headers="mcps1.1.5.1.4 "><p>绑定优先识别手势。</p>
<p>gesture: 绑定的手势类型, mask: 事件响应设置。</p>
<div class="note"><span class="notetitle"> 说明: </span><div class="notebody"><ul><li>默认情况下,子组件优先于父组件识别手势,当父组件配置priorityGesture时,父组件优先于子组件进行识别。</li></ul>
Z
zengyawen 已提交
47 48 49
</div></div>
</td>
</tr>
Z
zengyawen 已提交
50
<tr><td class="cellrowborder" valign="top" width="18.108189181081894%" headers="mcps1.1.5.1.1 "><p>parallelGesture</p>
Z
zengyawen 已提交
51
</td>
Z
zengyawen 已提交
52 53
<td class="cellrowborder" valign="top" width="20.73792620737926%" headers="mcps1.1.5.1.2 "><p>gesture: <a href="#li13550165717410">GestureType</a>,</p>
<p>mask?: <a href="#li05419551143">GestureMask</a></p>
Z
zengyawen 已提交
54
</td>
Z
zengyawen 已提交
55 56
<td class="cellrowborder" valign="top" width="22.617738226177384%" headers="mcps1.1.5.1.3 "><p>gesture: -,</p>
<p>mask: GestureMask.Normal</p>
Z
zengyawen 已提交
57
</td>
Z
zengyawen 已提交
58 59 60
<td class="cellrowborder" valign="top" width="38.53614638536146%" headers="mcps1.1.5.1.4 "><p>绑定可与子组件手势同时触发的手势。</p>
<p>gesture: 绑定的手势类型, mask: 事件响应设置。</p>
<div class="note"><span class="notetitle"> 说明: </span><div class="notebody"><ul><li>手势事件为非冒泡事件。父组件设置parallelGesture时,父子组件相同的手势事件都可以触发,实现类似冒泡效果。</li></ul>
Z
zengyawen 已提交
61 62 63 64 65 66 67 68
</div></div>
</td>
</tr>
</tbody>
</table>

-   <a name="li05419551143"></a>GestureMask枚举说明

Z
zengyawen 已提交
69
    <table><thead align="left"><tr><th class="cellrowborder" valign="top" width="25.2%" id="mcps1.1.3.1.1"><p>名称</p>
Z
zengyawen 已提交
70
    </th>
Z
zengyawen 已提交
71
    <th class="cellrowborder" valign="top" width="74.8%" id="mcps1.1.3.1.2"><p>描述</p>
Z
zengyawen 已提交
72 73 74
    </th>
    </tr>
    </thead>
Z
zengyawen 已提交
75
    <tbody><tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>Normal</p>
Z
zengyawen 已提交
76
    </td>
Z
zengyawen 已提交
77
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>不屏蔽子组件的手势,按照默认手势识别顺序进行识别。</p>
Z
zengyawen 已提交
78 79
    </td>
    </tr>
Z
zengyawen 已提交
80
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>IgnoreInternal</p>
Z
zengyawen 已提交
81
    </td>
Z
zengyawen 已提交
82 83
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>屏蔽子组件的手势,仅当前容器的手势进行识别。</p>
    <div class="note"><span class="notetitle"> 说明: </span><div class="notebody"><p>子组件上系统内置的手势不会被屏蔽,如子组件为List组件时,内置的滑动手势仍然会触发。</p>
Z
zengyawen 已提交
84 85 86 87 88 89 90 91 92
    </div></div>
    </td>
    </tr>
    </tbody>
    </table>


-   <a name="li13550165717410"></a>系统提供如下Gesture类型

Z
zengyawen 已提交
93
    <table><thead align="left"><tr><th class="cellrowborder" valign="top" width="25.2%" id="mcps1.1.3.1.1"><p>名称</p>
Z
zengyawen 已提交
94
    </th>
Z
zengyawen 已提交
95
    <th class="cellrowborder" valign="top" width="74.8%" id="mcps1.1.3.1.2"><p>描述</p>
Z
zengyawen 已提交
96 97 98
    </th>
    </tr>
    </thead>
Z
zengyawen 已提交
99
    <tbody><tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>TapGesture</p>
Z
zengyawen 已提交
100
    </td>
Z
zengyawen 已提交
101
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>点击手势,支持单次点击、多次点击识别。</p>
Z
zengyawen 已提交
102 103
    </td>
    </tr>
Z
zengyawen 已提交
104
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>LongPressGesture</p>
Z
zengyawen 已提交
105
    </td>
Z
zengyawen 已提交
106
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>长按手势。</p>
Z
zengyawen 已提交
107 108
    </td>
    </tr>
Z
zengyawen 已提交
109
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>PanGesture</p>
Z
zengyawen 已提交
110
    </td>
Z
zengyawen 已提交
111
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>平移手势。</p>
Z
zengyawen 已提交
112 113
    </td>
    </tr>
Z
zengyawen 已提交
114
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>PinchGesture</p>
Z
zengyawen 已提交
115
    </td>
Z
zengyawen 已提交
116
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>捏合手势。</p>
Z
zengyawen 已提交
117 118
    </td>
    </tr>
Z
zengyawen 已提交
119
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>RotationGesture</p>
Z
zengyawen 已提交
120
    </td>
Z
zengyawen 已提交
121
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>旋转手势。</p>
Z
zengyawen 已提交
122 123
    </td>
    </tr>
Z
zengyawen 已提交
124
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>GestureGroup</p>
Z
zengyawen 已提交
125
    </td>
Z
zengyawen 已提交
126
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>手势识别组,多种手势组合为复合手势,支持连续识别、并行识别和互斥识别。</p>
Z
zengyawen 已提交
127 128 129 130 131 132 133 134 135 136 137 138
    </td>
    </tr>
    </tbody>
    </table>


## 响应手势事件<a name="section13681164710593"></a>

组件通过gesture方法绑定手势对象,可以通过手势对象提供的事件相应响应手势操作。如通过TapGesture对象的onAction事件响应点击事件。具体事件定义见各个手势对象章节。

-   TapGesture事件说明

Z
zengyawen 已提交
139
    <table><thead align="left"><tr><th class="cellrowborder" colspan="2" valign="top" id="mcps1.1.4.1.1"><p>名称</p>
Z
zengyawen 已提交
140
    </th>
Z
zengyawen 已提交
141
    <th class="cellrowborder" valign="top" id="mcps1.1.4.1.2"><p>功能描述</p>
Z
zengyawen 已提交
142 143 144
    </th>
    </tr>
    </thead>
Z
zengyawen 已提交
145
    <tbody><tr><td class="cellrowborder" colspan="2" valign="top" headers="mcps1.1.4.1.1 "><p>onAction((event?: <a href="#li209321550192419">GestureEvent</a>) =&gt; void)</p>
Z
zengyawen 已提交
146
    </td>
Z
zengyawen 已提交
147
    <td class="cellrowborder" valign="top" headers="mcps1.1.4.1.2 "><p>Tap手势识别成功回调。</p>
Z
zengyawen 已提交
148 149 150 151 152 153 154 155 156
    </td>
    </tr>
    </tbody>
    </table>


-   <a name="li209321550192419"></a>GestureEvent对象说明

    <a name="table290mcpsimp"></a>
Z
zengyawen 已提交
157
    <table><thead align="left"><tr><th class="cellrowborder" valign="top" width="20.09%" id="mcps1.1.4.1.1"><p>属性名称</p>
Z
zengyawen 已提交
158
    </th>
Z
zengyawen 已提交
159
    <th class="cellrowborder" valign="top" width="18.41%" id="mcps1.1.4.1.2"><p>属性类型</p>
Z
zengyawen 已提交
160
    </th>
Z
zengyawen 已提交
161
    <th class="cellrowborder" valign="top" width="61.5%" id="mcps1.1.4.1.3"><p>描述</p>
Z
zengyawen 已提交
162 163 164
    </th>
    </tr>
    </thead>
Z
zengyawen 已提交
165
    <tbody><tr><td class="cellrowborder" valign="top" width="20.09%" headers="mcps1.1.4.1.1 "><p>timestamp</p>
Z
zengyawen 已提交
166
    </td>
Z
zengyawen 已提交
167
    <td class="cellrowborder" valign="top" width="18.41%" headers="mcps1.1.4.1.2 "><p>number</p>
Z
zengyawen 已提交
168
    </td>
Z
zengyawen 已提交
169
    <td class="cellrowborder" valign="top" width="61.5%" headers="mcps1.1.4.1.3 "><p>事件时间戳。</p>
Z
zengyawen 已提交
170 171
    </td>
    </tr>
Z
zengyawen 已提交
172
    <tr><td class="cellrowborder" valign="top" width="20.09%" headers="mcps1.1.4.1.1 "><p>target<sup><span>8+</span></sup></p>
Z
zengyawen 已提交
173
    </td>
Z
zengyawen 已提交
174
    <td class="cellrowborder" valign="top" width="18.41%" headers="mcps1.1.4.1.2 "><p><a href="ts-universal-events-click.md#li552912253714">EventTarget</a></p>
Z
zengyawen 已提交
175
    </td>
Z
zengyawen 已提交
176
    <td class="cellrowborder" valign="top" width="61.5%" headers="mcps1.1.4.1.3 "><p>触发手势事件的元素对象。</p>
Z
zengyawen 已提交
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
    </td>
    </tr>
    </tbody>
    </table>


## 示例<a name="section5447171181015"></a>

```
@Entry
@Component
struct GestureSettingsExample {
  @State value: string = ''

  build() {
Z
zengyawen 已提交
192 193 194 195 196 197 198 199 200 201 202
    Column(){
      Column() {
        Text('Click\n' + this.value)
          .gesture(
          TapGesture()
            .onAction(() => {
              this.value = 'gesture onAction'
            }))
      }.height(200).width(300).padding(60).border({ width: 1 })
      //设置为priorityGesture时,会优先识别该绑定手势忽略内部gesture手势
      .priorityGesture(
Z
zengyawen 已提交
203
      TapGesture()
Z
zengyawen 已提交
204 205 206 207
        .onAction((event: GestureEvent) => {
          this.value = 'priorityGesture onAction' + '\ncomponent globalPos:('
          + event.target.area.globalPos.x + ',' + event.target.area.globalPos.y + ')\nwidth:'
          + event.target.area.width + '\nheight:' + event.target.area.height
Z
zengyawen 已提交
208
        }), GestureMask.IgnoreInternal
Z
zengyawen 已提交
209 210
      )
    }.padding(60)
Z
zengyawen 已提交
211 212 213 214
  }
}
```

Z
zengyawen 已提交
215
![](figures/zh-cn_image_0000001237475107.gif)
Z
zengyawen 已提交
216