《便单》APP开发技术分享一 —— HarmonyOS 鸿蒙Next原生精致

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

《便单》APP开发技术分享一 —— HarmonyOS 鸿蒙Next原生精致

引言

HarmonyOS的广阔生态中,六大原生特性——原生安全、原生精致、原生易用、原生智能、原生流畅与原生互联,共同构筑了系统独特的魅力。其中,“原生精致”作为提升用户体验的核心要素之一,对于开发一个优秀的HarmonyOS原生应用而言,其实现路径的精准把握尤为重要。本文旨在深入探讨如何巧妙实现HarmonyOS的“原生精致”,为用户带来前所未有的视觉与交互享受。

定义与核心理念

HarmonyOS的“原生精致”是其操作系统设计理念的直观体现,它不仅仅局限于界面美观,更是一种从视觉到交互的全面升级。这一特性通过采用全新设计风格,融合“光”与“场”的视效设计,营造出富有空间感和沉浸感的全新体验。HarmonyOS坚持“多端家族设计,天生沉浸和谐”的原则,确保用户在不同设备上的体验保持一致,整体视觉更加精致和谐。

涵盖视觉、交互、跨设备一致性以及技术支撑等多个方面的综合性特性。对于开发者而言,要实现这一特性,就需要从设计风格、细节优化、跨设备一致性以及技术实现等多个方面入手,全面提升应用的用户体验。

在官方的指南(设计理念-通用设计基础 | 华为开发者联盟 (huawei.com))中,个人认为最重要的有那么以下几点:弹性动画,高斯模糊。接下来我将会就我的作品便单来做分享。

弹性动画

弹性动画作为一种官方推崇的动效设计手段,其魅力在于通过精细调整时长与曲线参数,在界面转场、特征展现等场景中巧妙传达品牌的动态设计语言,赋予产品更加灵动与活泼的视觉体验。ArkUI框架中的@ohos.curves模块特别提供了四种阻尼弹簧曲线接口,其中springMotionresponsiveSpringMotion尤为我所青睐,原因在于它们能够无缝集成速度因素,使得在用户交互(如跟手动画或动画中断)时,过渡效果更为自然流畅。

为了进一步优化弹簧动画的表现力,我们可以细致调整responsedampingFraction两个关键参数。response参数直接关联到弹簧复位的速度,其值增大时,弹簧的振荡效应会更为显著,增添动态张力;而dampingFraction作为阻尼系数,其值减小时,弹簧的振荡周期将延长,带来更多次的往复,营造细腻的动态层次。尽管这些参数的设定背后可能隐藏着复杂的数学公式,但实践中,通过反复微调直至找到符合个人审美或项目需求的最佳组合,往往能收获意想不到的效果。

在此,我愿分享两组经过精心调试、效果显著的参数配置,供您参考与灵感激发,让您的动画设计更加出色。

curves.springMotion(0.5, 0.7)//震动一次
curves.springMotion(1, 0.5)//震动两次
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

高斯模糊

高斯模糊作为一种深受用户喜爱的视觉元素,其恰到好处的应用能清晰传达层次结构,赋予界面高级感。然而,过度使用则可能引发性能瓶颈,如帧率下降和加载延迟,这是用户难以接受的体验。因此,在设计中合理平衡高斯模糊的应用至关重要。

官方设计指南中已明确推荐,在底部页签组件上启用高斯模糊效果,通过设置barOverlap属性为true即可轻松实现。

screenshot_20240714_134241.jpg

此外,在官方未直接提及的场景,如展开式卡片组件及列表顶部标题栏,同样可以尝试融入高斯模糊与半透明效果的结合,以进一步丰富视觉层次与沉浸感。

screenshot_20240714_134236.jpg

对于背景高斯模糊与半透明效果的实现,主要有两种策略:

1.使用backdropBlur属性:推荐首选此方法,通过指定模糊半径来创建模糊效果,同时保持原有背景颜色不变(需背景色半透明以显现模糊效果)。这种方式不仅操作简便,还能有效避免对设计细节的过多干预。

2.直接应用样式或利用Stack布局:另一种方法是直接通过backgroundBlurStyle传入预设样式,但这种方式可能难以精准匹配产品的个性化设计需求,且可能在性能上造成较大负担。另外,通过Stack布局叠加一层背景层,并应用bluropacity属性,可以实现更灵活的视觉效果控制,同时复用背景色,提高开发效率。

针对列表顶部标题栏的模糊效果设计,一个通用的实现模板可概括为: Stack布局结合bluropacity属性,确保在保持性能优化的同时,实现既美观又实用的视觉呈现。

Stack() {
List() {
ListItem()
.height(56)
//List内容
}
.width(‘100%’)
.scrollBar(BarState.Off)
.height(“100%”)

Column()//模糊层 .height(56) .backgroundColor($r(“app.color.background”)) .opacity(0.8) .blur(60)

Row() {}//顶部标题栏 .padding({ left: 18, right: 18 }) .height(56) .width(‘100%’) } .alignContent(Alignment.Top) .backgroundColor($r(“app.color.background”)) <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>



关于《便单》APP开发技术分享一 —— HarmonyOS 鸿蒙Next原生精致的问题,您也可以访问:https://www.itying.com/category-93-b0.html 联系官网客服。

7 回复

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

我觉得跟手动画也很重要,不过官方有很详细的开发指南,就不继续讨论了

宝贝好厉害👍

希望HarmonyOS能继续推出更多实用的功能,满足用户的不同需求。

很酷的动画效果
回到顶部