From 61bc77d78ca2b64c92f75aac6edd880c27caee9b Mon Sep 17 00:00:00 2001 From: kangliangup <2352009235@qq.com> Date: Thu, 16 Oct 2025 23:09:16 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GesturesConfictPractice/README.md | 2 +- GesturesConfictPractice/build-profile.json5 | 16 +---------- .../entry/src/main/ets/pages/Index.ets | 12 +++++++++ .../entry/src/main/ets/pages/TestCode.ets | 27 ++++++++++--------- .../entry/src/main/module.json5 | 7 ++++- .../resources/base/profile/main_pages.json | 3 ++- 6 files changed, 37 insertions(+), 30 deletions(-) diff --git a/GesturesConfictPractice/README.md b/GesturesConfictPractice/README.md index b9a583fb..3fb97c26 100644 --- a/GesturesConfictPractice/README.md +++ b/GesturesConfictPractice/README.md @@ -33,7 +33,7 @@ ### 相关权限 -不涉及 +* 允许使用Internet网络:ohos.permission.INTERNET。 ## 约束与限制 diff --git a/GesturesConfictPractice/build-profile.json5 b/GesturesConfictPractice/build-profile.json5 index 6e060d8e..b2ca56e3 100644 --- a/GesturesConfictPractice/build-profile.json5 +++ b/GesturesConfictPractice/build-profile.json5 @@ -1,20 +1,6 @@ { "app": { - "signingConfigs": [ - { - "name": "default", - "type": "HarmonyOS", - "material": { - "certpath": "C:\\Users\\kl\\.ohos\\config\\default_GesturesConfictPractice_KFdURs0XiEcbni4lqvihGLgRTxLgrZwBY9K9w_2bgF4=.cer", - "keyAlias": "debugKey", - "keyPassword": "0000001B98687470C41AD5D2395DCA999D14C0AAD483063F11D9A44283733D9145D8FAB29F7075B9E1C485", - "profile": "C:\\Users\\kl\\.ohos\\config\\default_GesturesConfictPractice_KFdURs0XiEcbni4lqvihGLgRTxLgrZwBY9K9w_2bgF4=.p7b", - "signAlg": "SHA256withECDSA", - "storeFile": "C:\\Users\\kl\\.ohos\\config\\default_GesturesConfictPractice_KFdURs0XiEcbni4lqvihGLgRTxLgrZwBY9K9w_2bgF4=.p12", - "storePassword": "0000001B2E7BF5B01846D1CD2407B30E356F865D761E823FC9734C4605952FCDAEF60A27691C417B37D324" - } - } - ], + "signingConfigs": [], "products": [ { "name": "default", diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/Index.ets b/GesturesConfictPractice/entry/src/main/ets/pages/Index.ets index 79c29176..b71088b3 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/Index.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/Index.ets @@ -83,6 +83,18 @@ struct Index { .onClick(() => { this.jumperPage('GesturesConflictScene7'); }) + + Button('GesturesConflictScene7') + .width('100%') + .onClick(() => { + this.jumperPage('GesturesConflictScene7'); + }) + + Button('WebDemo') + .width('100%') + .onClick(() => { + this.jumperPage('TestCode'); + }) } .height('100%') .width('100%') diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets b/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets index 0660c014..48ce5425 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets @@ -15,21 +15,24 @@ import { webview } from '@kit.ArkWeb'; +@Entry @Component -struct StackA { +struct WebDemo { controller: webview.WebviewController = new webview.WebviewController(); build() { - // [Start web_nested_scroll] - Web( - // [StartExclude web_nested_scroll] - { src: 'https://developer.huawei.com/consumer/cn/', controller: this.controller } - // [EndExclude web_nested_scroll] - ) - .nestedScroll({ - scrollForward: NestedScrollMode.PARENT_FIRST, - scrollBackward: NestedScrollMode.SELF_FIRST - }) - // [End web_nested_scroll] + Column() { + // [Start web_nested_scroll] + Web( + // [StartExclude web_nested_scroll] + { src: 'https://developer.huawei.com/consumer/cn/', controller: this.controller } + // [EndExclude web_nested_scroll] + ) + .nestedScroll({ + scrollForward: NestedScrollMode.PARENT_FIRST, + scrollBackward: NestedScrollMode.SELF_FIRST + }) + // [End web_nested_scroll] + } } } \ No newline at end of file diff --git a/GesturesConfictPractice/entry/src/main/module.json5 b/GesturesConfictPractice/entry/src/main/module.json5 index ad219d73..dd39cd49 100644 --- a/GesturesConfictPractice/entry/src/main/module.json5 +++ b/GesturesConfictPractice/entry/src/main/module.json5 @@ -43,7 +43,12 @@ "name": "ohos.extension.backup", "resource": "$profile:backup_config" } - ], + ] + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.INTERNET" } ] } diff --git a/GesturesConfictPractice/entry/src/main/resources/base/profile/main_pages.json b/GesturesConfictPractice/entry/src/main/resources/base/profile/main_pages.json index 1d6b935f..715c019d 100644 --- a/GesturesConfictPractice/entry/src/main/resources/base/profile/main_pages.json +++ b/GesturesConfictPractice/entry/src/main/resources/base/profile/main_pages.json @@ -9,6 +9,7 @@ "pages/GesturesConflictScene6", "pages/GesturesConflictScene7", "pages/GesturesConflictScene2A", - "pages/GesturesConflictScene3A" + "pages/GesturesConflictScene3A", + "pages/TestCode" ] } \ No newline at end of file -- Gitee From a9e4c1f64dd47d95cf9fe8625ff94ee752df7b77 Mon Sep 17 00:00:00 2001 From: kangliangup <2352009235@qq.com> Date: Thu, 16 Oct 2025 23:14:20 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets b/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets index 48ce5425..2fa7afd1 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets @@ -17,7 +17,7 @@ import { webview } from '@kit.ArkWeb'; @Entry @Component -struct WebDemo { +struct TestCode { controller: webview.WebviewController = new webview.WebviewController(); build() { -- Gitee From b9e6e9eea55d76911caeb3afa8d6c56a4dfe382f Mon Sep 17 00:00:00 2001 From: kangliangup <2352009235@qq.com> Date: Thu, 16 Oct 2025 23:17:23 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets b/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets index 2fa7afd1..48ce5425 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets @@ -17,7 +17,7 @@ import { webview } from '@kit.ArkWeb'; @Entry @Component -struct TestCode { +struct WebDemo { controller: webview.WebviewController = new webview.WebviewController(); build() { -- Gitee From 93f727490048055185a2714c8c2a9f22bf68d190 Mon Sep 17 00:00:00 2001 From: kangliangup <2352009235@qq.com> Date: Fri, 17 Oct 2025 15:54:09 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GesturesConfictPractice/README.md | 22 ++++++++++++++----- .../entry/src/main/ets/pages/Index.ets | 6 ----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/GesturesConfictPractice/README.md b/GesturesConfictPractice/README.md index 3fb97c26..8847591f 100644 --- a/GesturesConfictPractice/README.md +++ b/GesturesConfictPractice/README.md @@ -4,6 +4,18 @@ 本代码示例展示了多个组件嵌套时同时绑定手势事件,或者同一个组件同时绑定多个手势等场景下,手势冲突问题的解决。 +### 效果说明 + +* GesturesConflictScene1:Scroll组件和List组件嵌套滑动冲突解决方案,Scroll组件和List组件实现整体滑动。 +* GesturesConflictScene2:单击手势和双击手势互斥执行,优先响应单机,无法响应双击事件。 +* GesturesConflictScene2A:单机手势和双击手势并行执行,单机和双击事件同时执行。 +* GesturesConflictScene3:系统手势覆盖自定义手势,Image组件长按自定义手势无法执行。 +* GesturesConflictScene4:自定义手势使用优先级手势priorityGesture,使自定义手势能顺利执行 +* GesturesConflictScene5:使用HitTestMode.None,上层的手势能传递给下层的手势。 +* GesturesConflictScene6:给按钮Button1设置了.monopolizeEvents(true)之后,当手指首先触摸在Button1之后,在手指离开之前,其它组件的手势和事件都不会触发。 +* GesturesConflictScene7:Scroll组件嵌套Scroll组件实现联合滚动。 +* TestCode:Web组件嵌套滚动组件解决方案。 + #### 使用说明 安装运行应用,进入应用首页,点击不同的按钮跳转到不同的手势场景示例。 @@ -18,13 +30,13 @@ │ │ └──EntryBackupAbility.ets // 数据备份恢复类 │ └──pages │ ├──GesturesConflictScene1.ets // 滚动容器嵌套滚动容器事件冲突 -│ ├──GesturesConflictScene2.ets // 使用组合手势同时绑定多个同类型手势冲突解反例 -│ ├──GesturesConflictScene2A.ets // 使用组合手势同时绑定多个同类型手势冲突解正例 +│ ├──GesturesConflictScene2.ets // 使用组合手势同时绑定多个同类型手势冲突解反例 +│ ├──GesturesConflictScene2A.ets // 使用组合手势同时绑定多个同类型手势冲突解正例 │ ├──GesturesConflictScene3.ets // 系统手势和自定义手势之间冲突反例 -│ ├──GesturesConflictScene3A.ets // 系统手势和自定义手势之间冲突正例 +│ ├──GesturesConflictScene3A.ets // 系统手势和自定义手势之间冲突正例, │ ├──GesturesConflictScene4.ets // 手势事件透传 -│ ├──GesturesConflictScene5.ets // 多点触控场景下手势冲突 -│ ├──GesturesConflictScene6.ets // 动态控制自定义手势是否响应 +│ ├──GesturesConflictScene5.ets // 多点触控场景下手势冲突, +│ ├──GesturesConflictScene6.ets // 动态控制自定义手势是否响应, │ ├──GesturesConflictScene7.ets // 父组件如何管理子组件手势 │ ├──Index.ets // 应用首页 │ └──TestCode.ets // Web组件示例 diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/Index.ets b/GesturesConfictPractice/entry/src/main/ets/pages/Index.ets index b71088b3..a84d417d 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/Index.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/Index.ets @@ -84,12 +84,6 @@ struct Index { this.jumperPage('GesturesConflictScene7'); }) - Button('GesturesConflictScene7') - .width('100%') - .onClick(() => { - this.jumperPage('GesturesConflictScene7'); - }) - Button('WebDemo') .width('100%') .onClick(() => { -- Gitee From 62fcb16e616f6f35f4a9c76c04882140c83b3a7e Mon Sep 17 00:00:00 2001 From: kangliangup <2352009235@qq.com> Date: Sun, 19 Oct 2025 09:17:33 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GesturesConfictPractice/README.md | 23 +++++++------ .../main/ets/pages/GesturesConflictScene2.ets | 3 +- .../ets/pages/GesturesConflictScene2A.ets | 3 +- .../main/ets/pages/GesturesConflictScene4.ets | 10 +++++- .../main/ets/pages/GesturesConflictScene5.ets | 13 ++++--- .../pages/{TestCode.ets => WebScrollDemo.ets} | 34 ++++++++++++------- .../resources/base/profile/main_pages.json | 2 +- 7 files changed, 54 insertions(+), 34 deletions(-) rename GesturesConfictPractice/entry/src/main/ets/pages/{TestCode.ets => WebScrollDemo.ets} (54%) diff --git a/GesturesConfictPractice/README.md b/GesturesConfictPractice/README.md index 8847591f..3a83c519 100644 --- a/GesturesConfictPractice/README.md +++ b/GesturesConfictPractice/README.md @@ -7,14 +7,15 @@ ### 效果说明 * GesturesConflictScene1:Scroll组件和List组件嵌套滑动冲突解决方案,Scroll组件和List组件实现整体滑动。 -* GesturesConflictScene2:单击手势和双击手势互斥执行,优先响应单机,无法响应双击事件。 -* GesturesConflictScene2A:单机手势和双击手势并行执行,单机和双击事件同时执行。 -* GesturesConflictScene3:系统手势覆盖自定义手势,Image组件长按自定义手势无法执行。 -* GesturesConflictScene4:自定义手势使用优先级手势priorityGesture,使自定义手势能顺利执行 -* GesturesConflictScene5:使用HitTestMode.None,上层的手势能传递给下层的手势。 -* GesturesConflictScene6:给按钮Button1设置了.monopolizeEvents(true)之后,当手指首先触摸在Button1之后,在手指离开之前,其它组件的手势和事件都不会触发。 +* GesturesConflictScene2:单击手势和双击手势互斥执行,优先响应单击,无法响应双击事件。 +* GesturesConflictScene2A:单击手势和双击手势并行执行,单击和双击事件同时执行。 +* GesturesConflictScene3:系统手势覆盖自定义手势,长按Image组件,Image组件放大,自定义长按手势不会触发。 +* GesturesConflictScene3A:自定义手势使用优先级手势priorityGesture,长按Image组件,Image组件无变化,自定义长按手势触发,弹出Toast提示。 +* GesturesConflictScene4:手势事件透传,在层的红色组件上左右滑动,弹出Toast提示。 +* GesturesConflictScene5:Button1使用事件独占属性.monopolizeEvents(true)后,一个手指按住Button1,另一个手指点击Button2,不会出发Button2的点击事件。 +* GesturesConflictScene6:长按红色区域不会触发拖拽效果。 * GesturesConflictScene7:Scroll组件嵌套Scroll组件实现联合滚动。 -* TestCode:Web组件嵌套滚动组件解决方案。 +* WebScrollDemo:Web组件和Scroll组件嵌套,红色区域的Text组件和Web组件一起滚动。 #### 使用说明 @@ -33,13 +34,13 @@ │ ├──GesturesConflictScene2.ets // 使用组合手势同时绑定多个同类型手势冲突解反例 │ ├──GesturesConflictScene2A.ets // 使用组合手势同时绑定多个同类型手势冲突解正例 │ ├──GesturesConflictScene3.ets // 系统手势和自定义手势之间冲突反例 -│ ├──GesturesConflictScene3A.ets // 系统手势和自定义手势之间冲突正例, +│ ├──GesturesConflictScene3A.ets // 系统手势和自定义手势之间冲突正例 │ ├──GesturesConflictScene4.ets // 手势事件透传 -│ ├──GesturesConflictScene5.ets // 多点触控场景下手势冲突, -│ ├──GesturesConflictScene6.ets // 动态控制自定义手势是否响应, +│ ├──GesturesConflictScene5.ets // 多点触控场景下手势冲突 +│ ├──GesturesConflictScene6.ets // 动态控制自定义手势是否响应 │ ├──GesturesConflictScene7.ets // 父组件如何管理子组件手势 │ ├──Index.ets // 应用首页 -│ └──TestCode.ets // Web组件示例 +│ └──WebScrollDemo.ets // Web组件和Scroll组件嵌套示例 └──entry/src/main/resources // 应用资源目录 ``` diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene2.ets b/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene2.ets index 815a2148..f116addb 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene2.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene2.ets @@ -22,8 +22,7 @@ struct GesturesConflictScene2 { build() { Column() { - Text('Exclusive gesture\n' + 'tapGesture count is 1:' + this.count1 + '\ntapGesture count is 2:' + this.count2 + - '\n') + Text('Exclusive gesture\n' + 'Click count is:' + this.count1 + '\nDouble click count is:' + this.count2 + '\n') .fontSize(28) } .height(200) diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene2A.ets b/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene2A.ets index 46336a52..c38b082c 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene2A.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene2A.ets @@ -21,8 +21,7 @@ struct GesturesConflictScene21 { build() { Column() { - Text('Exclusive gesture\n' + 'tapGesture count is 1:' + this.count1 + '\ntapGesture count is 2:' + this.count2 + - '\n') + Text('Exclusive gesture\n' + 'Click count is:' + this.count1 + '\nDouble click count is:' + this.count2 + '\n') .fontSize(28) } .height(200) diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene4.ets b/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene4.ets index e3c2e182..af7d20b2 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene4.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene4.ets @@ -14,6 +14,9 @@ */ // [Start gestures_conflict_scene4] +import { BusinessError } from '@kit.BasicServicesKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; + @Entry @Component struct GesturesConflictScene4 { @@ -27,7 +30,12 @@ struct GesturesConflictScene4 { SwipeGesture({ direction: SwipeDirection.Horizontal })//水平方向滑动手势 .onAction((event) => { if (event) { - console.info('Column SwipeGesture'); + try { + this.getUIContext().getPromptAction().showToast({ message: 'SwipeGesture' }); + } catch (err) { + let error = err as BusinessError; + hilog.error(0x0000, 'testTag', `showToast err, code: ${error.code}, mesage: ${error.message}`); + } } }) ) diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene5.ets b/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene5.ets index 28ab0eb6..724afc43 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene5.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/GesturesConflictScene5.ets @@ -14,6 +14,9 @@ */ // [Start gestures_conflict_scene5] +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BusinessError } from '@kit.BasicServicesKit'; + @Entry @Component struct GesturesConflictScene5 { @@ -30,7 +33,12 @@ struct GesturesConflictScene5 { .width(200) .height(50) .onClick(() => { - console.info('GesturesConflictScene5 Button2 click'); + try { + this.getUIContext().getPromptAction().showToast({ message: 'GesturesConflictScene5 Button2 click' }); + } catch (err) { + let error = err as BusinessError; + hilog.error(0x0000, 'testTag', `showToast err, code: ${error.code}, mesage: ${error.message}`); + } }) } .margin(20) @@ -39,9 +47,6 @@ struct GesturesConflictScene5 { .margin(15) } .width('100%') - .onDragStart(() => { - console.info('GesturesConflictScene5 Drag start.'); - }) .gesture( TapGesture({ count: 1 }) .onAction(() => { diff --git a/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets b/GesturesConfictPractice/entry/src/main/ets/pages/WebScrollDemo.ets similarity index 54% rename from GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets rename to GesturesConfictPractice/entry/src/main/ets/pages/WebScrollDemo.ets index 48ce5425..664d8d56 100644 --- a/GesturesConfictPractice/entry/src/main/ets/pages/TestCode.ets +++ b/GesturesConfictPractice/entry/src/main/ets/pages/WebScrollDemo.ets @@ -17,22 +17,30 @@ import { webview } from '@kit.ArkWeb'; @Entry @Component -struct WebDemo { +struct WebScrollDemo { controller: webview.WebviewController = new webview.WebviewController(); build() { - Column() { - // [Start web_nested_scroll] - Web( - // [StartExclude web_nested_scroll] - { src: 'https://developer.huawei.com/consumer/cn/', controller: this.controller } - // [EndExclude web_nested_scroll] - ) - .nestedScroll({ - scrollForward: NestedScrollMode.PARENT_FIRST, - scrollBackward: NestedScrollMode.SELF_FIRST - }) - // [End web_nested_scroll] + // [Start web_nested_scroll] + Scroll() { + Column() { + Text('Text') + .fontSize(50) + .backgroundColor(Color.Red) + .width('100%') + .height('40%') + Web( + // [StartExclude web_nested_scroll] + { src: 'https://developer.huawei.com/consumer/cn/', controller: this.controller } + // [EndExclude web_nested_scroll] + ) + .nestedScroll({ + scrollForward: NestedScrollMode.PARENT_FIRST, + scrollBackward: NestedScrollMode.SELF_FIRST + }) + + } } + // [End web_nested_scroll] } } \ No newline at end of file diff --git a/GesturesConfictPractice/entry/src/main/resources/base/profile/main_pages.json b/GesturesConfictPractice/entry/src/main/resources/base/profile/main_pages.json index 715c019d..57174054 100644 --- a/GesturesConfictPractice/entry/src/main/resources/base/profile/main_pages.json +++ b/GesturesConfictPractice/entry/src/main/resources/base/profile/main_pages.json @@ -10,6 +10,6 @@ "pages/GesturesConflictScene7", "pages/GesturesConflictScene2A", "pages/GesturesConflictScene3A", - "pages/TestCode" + "pages/WebScrollDemo" ] } \ No newline at end of file -- Gitee