没有动画的App,怎么叫‘有灵魂’?
你是不是也在想——“鸿蒙这么火,我能不能学会?这个专栏专为设计,,也不需要懂原理、背术语。我们会用最通俗易懂的语言、最贴近生活的案例,手把手带你从安装开发工具开始,一步步学会开发自己的鸿蒙应用。不管你是学生、上班族、打算转行,还是单纯对技术感兴趣,只要你愿意花一点时间,📌每一节内容我都会持续更新,配图+代码+解释全都有,欢迎点个关注,不走丢,我是,我们一起上路 🚀。
·
你是不是也在想——“鸿蒙这么火,我能不能学会?”
答案是:当然可以!
这个专栏专为零基础小白设计,不需要编程基础,也不需要懂原理、背术语。我们会用最通俗易懂的语言、最贴近生活的案例,手把手带你从安装开发工具开始,一步步学会开发自己的鸿蒙应用。
不管你是学生、上班族、打算转行,还是单纯对技术感兴趣,只要你愿意花一点时间,就能在这里搞懂鸿蒙开发,并做出属于自己的App!
📌 关注本专栏《零基础学鸿蒙开发》,一起变强!
每一节内容我都会持续更新,配图+代码+解释全都有,欢迎点个关注,不走丢,我是小白酷爱学习,我们一起上路 🚀
全文目录:
🎯 本模块核心目标
| 技术点 | 关键词 |
|---|---|
| 1. 动画系统 | 属性动画、帧动画、过渡动画 |
| 2. 微交互实战 | 弹窗、滑动删除、吸附、过渡动效 |
| 3. 页面体验 | 页面进出动画、手势反馈、抖动提示 |
🌀 鸿蒙动画系统总览
ArkTS 提供了极其丰富且类型明确的动画接口,常见的包括:
- 属性动画:元素位置、大小、透明度等属性变化
- 插值器动画(缓动曲线):自然的动画过渡效果
- 组合动画(串行/并行):多个动画叠加执行
- 帧动画(ImageSequence):适用于逐帧播放图片
- 触发动画(onAppear/onClick):UI驱动逻辑动画
✳️ 示例1:弹窗弹出带缩放过渡(使用 animateTo)
@State showDialog: boolean = false;
@State scaleVal: number = 0;
if (this.showDialog) {
animateTo({ duration: 300, curve: Curve.EaseOut }) {
this.scaleVal = 1;
}
}
Dialog() {
Text("这是一个弹窗")
.scale({ x: this.scaleVal, y: this.scaleVal })
}
✳️ 示例2:滑动删除(结合 Gesture + Offset)
@State offsetX: number = 0;
Gesture(
DragGesture()
.onUpdate(event => {
this.offsetX = event.offsetX;
})
.onEnd(() => {
if (Math.abs(this.offsetX) > 100) {
this.deleteItem(); // 触发删除逻辑
} else {
animateTo({ duration: 200 }) {
this.offsetX = 0;
}
}
})
)
Row()
.translate({ x: this.offsetX })
.background(Color.White)
.height(60)
.margin(4)
效果类似微信或钉钉的“滑动删除”交互,非常自然。
🧪 微交互实战场景
| 交互场景 | 技术关键 | 实战说明 |
|---|---|---|
| 弹窗展开/关闭 | scale + opacity |
带动画的模态提示 |
| 滑动删除 | offsetX + DragGesture |
左滑显示删除按钮 |
| 点击抖动 | animateTo + scale 或 rotation |
输入错误反馈 |
| 页面切换动画 | 页面路由参数中的 transitionEffect |
弹出式页面体验 |
| 长按反馈 | onLongPress + 色块动画 |
增强手感 |
🧩 实战:微交互 Todo 应用升级版
让我们把之前的 Todo 清单项目,升级几个体验细节:
✅ 添加任务时,按钮缩放动画
Button("添加任务")
.scale({ x: this.pressed ? 0.95 : 1, y: this.pressed ? 0.95 : 1 })
.onTouch(event => {
if (event.type === TouchType.Down) {
this.pressed = true;
} else if (event.type === TouchType.Up) {
this.pressed = false;
this.addTask();
}
})
✅ 输入框输入错误时抖动反馈
@State offsetX: number = 0;
async validateInput() {
if (this.taskTitle.trim() === '') {
// 抖动动画
for (let i = 0; i < 3; i++) {
this.offsetX = -10;
await delay(50);
this.offsetX = 10;
await delay(50);
}
this.offsetX = 0;
return;
}
this.addTask();
}
TextInput({ placeholder: "输入任务" })
.translate({ x: this.offsetX })
✅ 滑动删除任务(带动画吸附)
@State offsetX: number = 0;
@State deleted: boolean = false;
Gesture(
DragGesture()
.onUpdate(event => this.offsetX = event.offsetX)
.onEnd(() => {
if (this.offsetX < -120) {
animateTo({ duration: 200 }) {
this.offsetX = -500;
}
this.deleted = true;
setTimeout(() => this.deleteTask(), 300);
} else {
animateTo({ duration: 200 }) {
this.offsetX = 0;
}
}
})
)
if (!this.deleted) {
Row() {
Text("任务名称")
}
.translate({ x: this.offsetX })
}
🔚 小结 & 反思
❓“一个功能写完了,为什么看起来像个‘粗糙的原型’?”
答案是:你缺了动画,缺了微交互!
在鸿蒙开发中,“动起来”是用户体验的关键。通过这一章你应该掌握了:
- 如何使用
animateTo为控件添加自然过渡动画 - 如何响应手势实现滑动、吸附、拖动等交互
- 如何用状态和动画变量做“轻量级状态动画”
❤️ 如果本文帮到了你…
- 请点个赞,让我知道你还在坚持阅读技术长文!
- 请收藏本文,因为你以后一定还会用上!
- 如果你在学习过程中遇到bug,请留言,我帮你踩坑!
更多推荐


所有评论(0)