harmony 鸿蒙ArkUI动画/交互事件开发常见问题(ArkTS)

ArkUI动画/交互事件开发常见问题(ArkTS)

焦点事件onBlur/onFocus回调无法触发(API 9)

问题现象

焦点事件onBlur/onFocus回调无法触发

解决措施

焦点事件默认情况下需要外接键盘的Tab键,或方向键触发,点击触发焦点事件需要添加焦点控制属性focusOnTouch。

参考链接

焦点控制

scroll里面套一个grid,如何禁用grid的滑动事件(API 9)

可以通过onScrollFrameBegin事件和scrollBy方法实现容器嵌套滚动。

参考链接

容器嵌套滚动样例

如何实现一个组件不停地旋转(API 9)

可以通过属性动画的方式实现。

列表目前无法键盘上下滑动,是否能力不支持(API 9)

解决措施

有以下两种方案:

  1. 需要在列表子项中添加focusable(true)进行获焦。

  2. 在每个item的外层嵌套一个可获焦组件,例如Button。

键盘移动焦点对象按下enter,为什么不会触发点击事件(API 9)

组件的内置的点击事件和开发者自定义的onClick点击事件默认会和空格键绑定,并非与enter键绑定(UX规格)。

多层组件嵌套button,如何阻止事件传递(API 9)

可以通过将button组件绑定参数stopPropagation来控制冒泡传递。

使用router或Navigator实现页面跳转时,如何关闭页面间转场动效(API 9)

  1. 参考页面间转场示例在当前页面和目标页面中定义pageTransition方法。

  2. 将页面入场组件PageTransitionEnter和页面退场组件PageTransitionExit的动效参数duration都设置为0。

在容器组件嵌套的场景下,如何解决手势拖拽事件出现错乱的问题(API 9)

PanGesture用于触发拖动手势事件,滑动的最小距离distance默认为5vp时拖动手势识别成功。可以将distance值设为1,使拖动更灵敏,避免造成事件错乱。

参考链接

PanGesture

是否支持使用fontFamily属性设置不同的字体(API 9)

默认字体’HarmonyOS Sans’,且当前只支持这种字体。

点击输入框时会拉起软键盘,点击button时软键盘关闭要如何实现(API 9)

TextInput获取焦点会弹出输入法,失去焦点就会关闭软键盘,使用focusControl控制焦点即可关闭软键盘。

代码示例

build() {Column() {TextInput()Button(`hide`).key('button').onClick(()=>{focusControl.requestFocus('button')})}
}

当父组件绑定了onTouch,其子组件Button绑定了onClick,如何做到点击Button只响应Button的onClick,而不用响应父组件的onTouch(API 9)

可以在Button组件中绑定onTouch,并在onTouch中使用stopPropagation()阻止onTouch冒泡传递到父组件阻止冒泡传递。

代码示例

build() {Row() {Button("点击我").width(100).width(100).backgroundColor('#f00').onClick(()=>{console.log("Button onClick")}).onTouch((e) => {console.log("Button onTouch")e.stopPropagation()})}.onTouch(() => {console.log("Row onTouch")})
}

绑定菜单后无法使用右键触发菜单(API 9)

解决措施

目前菜单仅支持点击、长按触发方式,没有右键方式。

点击文本输入框,如何屏蔽系统默认键盘弹起行为(API 9)

设置TextInput组件的focusable属性为false,此组件则不可获焦,就不会拉起系统默认的键盘。

如何实现上下切换的页面间跳转动画(API 9)

问题现象

页面切换时如何实现上下切换动画

解决措施

可以使用pageTransition函数来实现页面转场效果,通过PageTransitionEnter和PageTransitionExit指定页面进入和退出的动画效果,将其slide属性设置为SlideEffect.Bottom,则页面入场时从下边划入,出场时滑出到下边,即可实现上下切换效果。

代码示例

// Index.ets
@Entry
@Component
struct PageTransition1 {build() {Stack({alignContent: Alignment.Bottom}) {Navigator({ target: 'pages/Page1'}) {Image($r('app.media.ic_banner01')).width('100%').height(200) // 图片存放在media文件夹下}}.height('100%').width('100%')}pageTransition() {PageTransitionEnter({ duration: 500, curve: Curve.Linear }).slide(SlideEffect.Bottom)PageTransitionExit({ duration: 500, curve: Curve.Ease }).slide(SlideEffect.Bottom)}
}
// Page1.ets
@Entry
@Component
struct PageTransition2 {build() {Stack({alignContent: Alignment.Bottom}) {Navigator({ target: 'pages/Index'}) {Image($r('app.media.ic_banner02')).width('100%').height(200) // 图片存放在media文件夹下}}.height('100%').width('100%')}pageTransition() {PageTransitionEnter({ duration: 500, curve: Curve.Linear }).slide(SlideEffect.Bottom)PageTransitionExit({ duration: 500, curve: Curve.Ease }).slide(SlideEffect.Bottom)}
}

参考链接

页面间转场

自定义组件间如何实现从底部滑入滑出的效果(API 9)

问题现象

一个页面底部默认显示自定义组件A,点击自定义组件A,则A消失,自定义组件B从底部出现;点击自定义组件B,则组件B消失,A从底部出现。这个效果要如何实现?

解决措施

可以使用transition产生组件转场动画,其参数type用来设置组件变化场景,包括新增和删除;参数translate用来设置转场时的平移效果。注意transition需要配合animateTo才能生效,动效时长、曲线、延时跟随animateTo中的配置。

代码示例

@Entry
@Component
struct ComponentTransition {@State flag: boolean = true;build() {Stack({alignContent: Alignment.Bottom}) {if (this.flag) {ComponentChild1({ flag: $flag }).transition({ type: TransitionType.Insert,translate: { x: 0, y: 200 } })}if (!this.flag) {ComponentChild2({ flag: $flag }).transition({ type: TransitionType.Insert, translate: { x: 0, y: 200 } })}}.height('100%').width('100%')}
}@Component
struct ComponentChild1 {@Link flag: booleanbuild() {Column() {Image($r('app.media.ic_banner01')).width('100%').height(200).onClick(() => {animateTo({ duration: 1000 }, () => {this.flag = !this.flag;})})}}
}@Component
struct ComponentChild2 {@Link flag: booleanbuild() {Column() {Image($r('app.media.ic_banner02')).width('100%').height(200).onClick(() => {animateTo({ duration: 1000 }, () => {this.flag = !this.flag;})})}}
}

参考链接

出现/消失转场

文件管理器短按不响应(API 10)

问题现象

短按文件夹图标,如点击时长在200-500ms松手会触发文件管理器点击不响应。

原因分析

拖拽手势识别逻辑存在异常分支未处理,短按特定时间段松手会导致手势识别器处于pending状态,不再响应用户输入导致文件管理器出现卡死现象。

解决措施

长按文件图标或者空白区域即可恢复。

仅供参考!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 监控USB硬盘插拔事件并自动挂载和卸载

定义udev规则来监控USB插拔事件。 一、在/etc/udev/rules.d目录下随意创建一个规则文件,例:99-usb-mount.rules KERNEL"sd[b-z]?",SUBSYSTEM"block",RUN"/usr/local/src/mountusb.sh %k $env{ACTION}"二、创建 /usr/lo…

基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究

技术背景 2014年4月8日起,美国微软公司停止了对Windows XP SP3操作系统提供服务支持,这引起了社会和广大用户的广泛关注和对信息安全的担忧。而2020年对Windows7服务支持的终止再一次推动了国产系统的发展。工信部对此表示,将继续加大力度&a…

C++ 红黑树

目录 1.红黑树的概念 2.红黑树的性质 3.红黑树节点的定义 4.红黑树的插入操作 5.数据测试 1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…

C++基础与深度解析 | 泛型算法 | bind | Lambda表达式

文章目录 一、泛型算法1.泛型算法的分类2.迭代器分类 二、bind与lambda表达式1.bind2.lambda表达式 三、泛型算法的改进--ranges(c20) 一、泛型算法 C中的泛型算法是标准模板库(STL)的一部分(这里重点讨论 C 标准库中定义的算法,而…

【vue-cli搭建vue项目的过程2.x】

vue-cli搭建vue项目 vue-cli搭建vue项目安装node安装vue-cli脚手架并创建项目安装 Ant Design Vue或element-ui(笔者使用Ant-design-vue组件,并全局引入)开发安装三方库包1、Package.json文件---引入如下package.json文件执行npm i或npm install命令即可下载如下依赖…

数据结构~~链式二叉树

目录 一、基本概念 链式存储概念 二、链式二叉树的结构 链式二叉树结构 构建链式二叉树 二叉树的遍历 二叉树节点和高度等 二叉树销毁 三、链式二叉树的练习 相同的树 对称二叉树 另外一颗子树 二叉树前序遍历 二叉树遍历 四、完整代码 Tree.h Tree.c 五、总结 一…

Linux服务升级:Predixy 升级代理 Redis-cluster 集群

目录 一、实验 1.环境 2. 启动Redis服务 3.Predixy 升级代理 Redis-cluster 集群 二、问题 1. Predixy进行set操作报错 2.如何创建脚本启动predixy 3.Redis代理对比 一、实验 1.环境 (1)主机 表1 主机 系统版本节点软件IP备注CentOS7.9Redis…

Springboot开发 -- Postman 调试类型详解

引言 在 Spring Boot 应用开发过程中,接口测试是必不可少的一环。Postman 作为一款强大的 API 开发和测试工具,可以帮助开发者轻松构建、测试和管理 HTTP 请求。本文将为大家介绍如何在 Spring Boot 开发中使用 Postman 进行接口测试。 一、准备工作 安…

C/C++|malloc分配内存详解

看本节前,希望读者有linux内存分布的基本概念,可以阅读这篇文章: 进程虚拟地址空间和函数调用栈 在本节中希望读者可以一口气阅读完所有内容。 本博客内容全部来自小林coding:malloc 是如何分配内存的? 这里仅为笔记记…

Python-图片旋转360,保存对应图片

#Author :susocool #Creattime:2024/5/25 #FileName:turn360 #Description: 会旋转指定的图像文件360度,并将每个旋转后的图像保存到指定目录,文件名以旋转角度命名。 from PIL import Imagedef rotate_and_save(image_path, output_dir) :# …

Linux/Ubuntu 中安装 ZeroTier,实现内网穿透,2分钟搞定

相信很多人都有远程连接家中设备的需求,如远程连接家中的NAS、Windows等服务,所以会涉及到一个内网穿透工具的使用,如果没有公网IP的情况下,推荐大家使用ZeroTier,这是一款强大的内网穿透工具。 mac和windows版的操作…

Nginx-狂神说

Nginx概述 公司产品出现瓶颈? 我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。 但是慢慢的,使用我们平台…

HTTP 各版本差异

http1.0 它的特点是每次请球和响应完毕后都会销毁TCP 连接。同时规走前一个响应完成后才发送下一个请求。这样做有两个问题: 无法复用连接了。 每次请求都要创建新的TCP连接,完成三次握手和四次挥手。网络利用率低 队头阻塞 如果前一个请求被某种原因阻…

K8S认证|CKA题库+答案| 13. sidecar 代理容器日志

目录 13、使用 sidecar 代理容器日志 CKA v1.29.0模拟系统免费下载试用: 题目: 开始操作: 1)、切换集群 2)、生成yaml文件 3)、官网找模板 4)、编辑yaml文件 5)、应用yaml…

车载电子电器架构 —— 智能座舱技术

车载电子电器架构 —— 智能座舱技术 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的…

qt multiple definition of 报错解决

qt编译报了很多错, multiple definition of xxx 原来一维设计文件ui 的问题 后来发现是pro中头文件和cpp文件重写了,导致重复编译报的错 解决方法:把重复的头文件和cpp文件删了就可以了。

如何解决0.1+0.2!=0.3的问题

var x 0.1; var y 0.2; var z x y // z 的结果为 0.30000000000000004 if (z 0.3) // 返回 false 可以用整数的乘除法来解决 var z (x * 10 y * 10) / 10; // z 的结果为 0.3

GEO数据挖掘-GEO背景知识+表达芯片分析思路

From生物技能树 GEO数据挖掘第一节 (pipeline) 文章目录 1.图表分析2.GEO背景介绍及分析思路3.代码分析流程4.复杂数据分析理论知识1.数据从哪里来2.有什么类型的数据可挖掘3.如何筛选基因(分析方法)在这里插入图片描述 图表介绍1…

Jenkins + github 自动化部署配置

1 Jenkins安装 AWS EC2安装Jenkins:AWS EC2 JDK11 Jenkins-CSDN博客 AWS EC2上Docker安装Jenkins:https://blog.csdn.net/hhujjj2005/article/details/139078402 2 登录jenkins http://192.168.1.128:8080/ $ docker exec -it d1851d9e3386 /bin/ba…

Multi-objective reinforcement learning approach for trip recommendation

Multi-objective reinforcement learning approach for trip recommendation A B S T R A C T 行程推荐是一项智能服务,为游客在陌生的城市提供个性化的行程规划。 它旨在构建一系列有序的 POI,在时间和空间限制下最大化用户的旅行体验。 将候选 POI 添…