首页 > 其他分享 >「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用

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

时间:2024-11-03 11:18:42浏览次数:5  
标签:动画 Canvas context 鸿蒙 private dx 组件 600

在鸿蒙应用中,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 中水平往返移动,碰到边界会反弹。

标签:动画,Canvas,context,鸿蒙,private,dx,组件,600
From: https://blog.csdn.net/weixin_44217688/article/details/143448936

相关文章

  • 【Canvas与标志】黄黑辐射警示标志
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>629.黄黑辐射警示牌</title><styletype="......
  • 鸿蒙Next应用本地化:资源管理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在应用本地化中资源管理方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在鸿蒙Next......
  • 鸿蒙Next应用国际化:时区与夏令时处理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在应用国际化中时区与夏令时处理方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在......
  • 鸿蒙Next应用国际化:时间与日期格式化
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在应用国际化中时间与日期格式化方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在......
  • 鸿蒙Next应用本地化:翻译场景的重要性
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)在应用本地化中翻译场景方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在鸿蒙Next......
  • 鸿蒙开发案例:分贝仪
    【1】引言(完整代码在最后面)分贝仪是一个简单的应用,用于测量周围环境的噪音水平。通过麦克风采集音频数据,计算当前的分贝值,并在界面上实时显示。该应用不仅展示了鸿蒙系统的基础功能,还涉及到了权限管理、音频处理和UI设计等多个方面。【2】环境准备电脑系统:windows10开发工具......
  • 鸿蒙NEXT开发实战教程:仿抖音短视频
    今天的实战教程是简单模仿一下抖音短视频,主要是首页部分的内容,先看效果图:下面为大家讲解这个项目的详细教程。tabbarTabbar的难点在于中间有个发布按钮,思路是我们可以在tabbar里加个判断,中间按钮使用图片,其余按钮使用文字。相关代码如下:@Statearr:Array<string>=['首......
  • 探索 cola 扩展组件的应用
    一、痛点在日常开发中,不想通过写一堆if...else...实现业务逻辑判断,使得代码越来越长难以维护,又不想每次都用编码形式在Spring中实现策略模式。要是有一个组件能通过注解配置,同时还能支持多个维度的策略判断就简单了。二、如何解决在学习cola框架时,发现cola扩展组件能通过......
  • CRON组件一个复杂的一个简单的
    CRON组件一个复杂的一个简单的一个是复杂点的一个是简单点。1.以简单的为例使用:父组件importCronSimplefrom"@/views/xxx/components/cron-simple/index.vue";components:{CronSimple}<el-dialogtitle="调度CRON"v-if="cronVisi......
  • 「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
    List和Grid是鸿蒙开发中的核心组件,用于展示动态数据。List适合展示垂直或水平排列的数据列表,而Grid则适用于展示商品或图片的网格布局。本篇将展示如何封装组件,并通过按钮实现布局切换,提升界面的灵活性和用户体验。关键词List组件Grid组件数据展示自定义列......