当前位置: 首页 > news >正文

「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用

在鸿蒙应用中,Canvas 组件可以实现丰富的动态效果,适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画,以及性能优化策略。

在这里插入图片描述


关键词
  • Canvas 组件
  • 动态绘制
  • 动画效果
  • 动态进度条
  • 旋转和缩放
  • 性能优化

一、使用定时器实现动画循环

通过定时更新画布内容,可以让图形在 Canvas 中产生动画效果。setTimeout 方法可用于实现帧刷新,使图形流畅移动。

1.1 动画循环示例:水平移动

以下代码展示了如何在 Canvas 上创建一个自动移动的圆形。

@Entry
@Component
struct MovingCircleExample {private x: number = 0; // 圆心的 x 坐标private dx: number = 5; // 每帧的水平移动距离private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(); // 创建 Canvas 渲染上下文build() {Column() {Canvas(this.context).width('100%').height(600).onReady(() => {this.animateCircle(); // 开始动画});}}private animateCircle(): void {this.context.clearRect(0, 0, 600, 600); // 清除画布this.context.beginPath(); // 开始新路径this.context.arc(this.x, 300, 50, 0, 2 * Math.PI); // 绘制圆形this.context.fillStyle = '#FF4500'; // 设置填充颜色为橙色this.context.fill(); // 填充圆形this.x += this.dx; // 更新圆心的 x 坐标if (this.x > 600 || this.x < 0) {this.dx = -this.dx; // 碰到边界时反向}// 使用 setTimeout 模拟帧刷新setTimeout(() => this.animateCircle(), 16); // 约60帧每秒}
}

效果示例:一个橙色圆形在 Canvas 中水平往返移动,碰到边界会反弹。


http://www.mrgr.cn/news/64650.html

相关文章:

  • 网付碰一下支付系统功能分享来了!
  • 【自动化测试】APP UI 自动化(安卓)-本地环境搭建
  • 如何生成 PEM 格式的 SSH 密钥 ?
  • STM32之看门狗
  • 如何选择最适合的消息队列?详解 Kafka、RocketMQ、RabbitMQ 的使用场景
  • YOLOv10改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度
  • C++——unordered_map和unordered_set的封装
  • 解决使用netstat查看端口显示FIN_WAIT的问题
  • 51c自动驾驶~合集4
  • Vue 响应式原理(数据双向绑定) - 2024最新版前端秋招面试短期突击面试题【100道】
  • 【架构艺术】服务架构稳定性的基础保障
  • 海滨学院班级记忆录:技术实现与设计创新
  • linux系统编程 man查看manual.stat
  • 商业数据库 - oracle -表空间管理 - 创建数据库
  • 硬件基础02 双极结型三极管理论-BJT
  • jmeter脚本-请求体设置变量and请求体太长的处理
  • (57)MATLAB使用迫零均衡器和MMSE均衡器的BPSK调制系统仿真
  • 海滨学院班级时光机:回忆录设计与实现
  • MySQL——索引
  • 人人都能看懂的大模型 DPO 数学原理
  • 海的回忆:海滨学院班级记忆录技术实现
  • 分段三次Hermite插值算法及推导过程
  • 个体营业执照经营异常多久解除
  • ts:用加减乘除方法配合展示类的继承(extends)
  • 网站模板有哪些提供比较好的
  • 在平衡中追寻高度:探秘AVL树的自我调节之美