「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用

简介: 在鸿蒙应用开发中,Canvas 组件不仅用于基础绘图,还提供了处理复杂路径和渐变效果的多种手段,帮助开发者实现精美的静态图形。本篇将介绍如何在 Canvas 中绘制复杂路径、创建渐变填充效果。

在鸿蒙应用开发中,Canvas 组件不仅用于基础绘图,还提供了处理复杂路径和渐变效果的多种手段,帮助开发者实现精美的静态图形。本篇将介绍如何在 Canvas 中绘制复杂路径、创建渐变填充效果。

Screenshot_2024-11-02T004722.png


关键词
  • Canvas 组件
  • 复杂路径绘制
  • 渐变填充

一、Canvas 的复杂路径绘制

Canvas 提供了 bezierCurveToquadraticCurveTo 等方法,允许开发者绘制复杂的贝塞尔曲线路径,并实现流畅的弧形、曲线效果。

1.1 绘制贝塞尔曲线

贝塞尔曲线适用于绘制平滑、自然的曲线路径,广泛应用于动画和复杂图形的设计中。

@Entry
@Component
struct BezierCurveExample {
   
  build() {
   
    Column() {
   
      Canvas(this.context)
        .width('100%')
        .height(500)
        .onReady(() => {
   
          this.context.strokeStyle = '#8A2BE2'; // 设置曲线颜色为紫色
          this.context.lineWidth = 3; // 设置曲线宽度

          this.context.beginPath(); // 开始新路径
          this.context.moveTo(50, 250); // 移动到起点 (50, 250)
          // 使用贝塞尔曲线方法,控制点和终点设置
          this.context.bezierCurveTo(150, 50, 350, 450, 450, 250); // 绘制贝塞尔曲线
          this.context.stroke(); // 绘制路径
        });
      Image($r('app.media.cat')) // 添加一张图片
        .width(305)
        .height(360);
    }
  }

  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(); // 创建 Canvas 渲染上下文
}

效果示例:在画布上绘制一条弧形的贝塞尔曲线,颜色为紫色。

Screenshot_2024-11-02T004534.png


1.2 绘制二次曲线

二次贝塞尔曲线使用一个控制点,适合绘制较为简单的曲线。

@Entry
@Component
struct QuadraticCurveExample {
   
  build() {
   
    Column() {
   
      Canvas(this.context)
        .width('100%')
        .height(500)
        .onReady(() => {
   
          this.context.strokeStyle = '#FF1493'; // 设置曲线颜色为粉红色
          this.context.lineWidth = 3; // 设置曲线宽度

          this.context.beginPath(); // 开始新路径
          this.context.moveTo(50, 300); // 移动到起点 (50, 300)
          // 使用二次曲线方法,控制点和终点设置
          this.context.quadraticCurveTo(250, 50, 450, 300); // 绘制二次曲线
          this.context.stroke(); // 绘制路径
        });
      Image($r('app.media.cat')) // 添加一张图片
        .width(305)
        .height(360);
    }
  }

  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(); // 创建 Canvas 渲染上下文
}

效果示例:在画布上绘制一条粉红色的二次曲线,呈现较为柔和的弧形。

Screenshot_2024-11-02T004600.png


二、渐变填充效果

Canvas 提供了线性渐变和径向渐变效果,可以让图形填充颜色更为丰富。通过 createLinearGradientcreateRadialGradient 方法,开发者可以轻松实现渐变效果。

2.1 线性渐变

以下代码展示了如何在 Canvas 中绘制一个具有线性渐变效果的矩形。

@Entry
@Component
struct LinearGradientExample {
   
  build() {
   
    Column() {
   
      Canvas(this.context)
        .width('100%')
        .height(500)
        .onReady(() => {
   
          const gradient = this.context.createLinearGradient(50, 50, 450, 50); // 创建线性渐变对象
          gradient.addColorStop(0, '#FF0000'); // 渐变起始色为红色
          gradient.addColorStop(1, '#0000FF'); // 渐变结束色为蓝色

          this.context.fillStyle = gradient; // 应用渐变颜色
          this.context.fillRect(50, 200, 400, 200); // 绘制矩形
        });
      Image($r('app.media.cat')) // 添加一张图片
        .width(305)
        .height(360);
    }
  }

  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(); // 创建 Canvas 渲染上下文
}

效果示例:一个矩形从左至右呈现由红色到蓝色的线性渐变效果。

Screenshot_2024-11-02T004641.png


2.2 径向渐变

径向渐变可以让颜色从一个圆形区域向外扩散,适合应用于按钮背景、光晕等效果。

@Entry
@Component
struct RadialGradientExample {
   
  build() {
   
    Column() {
   
      Canvas(this.context)
        .width('100%')
        .height(500)
        .onReady(() => {
   
          const gradient = this.context.createRadialGradient(300, 300, 50, 300, 300, 200); // 创建径向渐变对象
          gradient.addColorStop(0, '#FFD700'); // 渐变中心颜色为金色
          gradient.addColorStop(1, '#FF4500'); // 渐变外围颜色为橙红色

          this.context.fillStyle = gradient; // 应用渐变颜色
          this.context.beginPath(); // 开始新路径
          this.context.arc(300, 300, 200, 0, 2 * Math.PI); // 绘制圆形填充
          this.context.fill(); // 填充圆形
        });
      Image($r('app.media.cat')) // 添加一张图片
        .width(305)
        .height(360);
    }
  }

  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(); // 创建 Canvas 渲染上下文
}

效果示例:一个圆形填充的径向渐变图案,从中心向四周呈现由金色到橙红色的渐变效果。


小结

本篇介绍了鸿蒙 Canvas 组件的静态进阶应用,包括复杂路径绘制和渐变填充效果。通过这些技术,开发者可以实现更复杂和高效的静态图形展示。


下一篇预告

在下一篇中,我们将深入探讨鸿蒙 Canvas 组件的动态绘制,包括如何实现循环动画、动态进度条和旋转缩放动画。


上一篇: 「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas组件自定义绘图

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


作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=269
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


目录
相关文章
|
8月前
|
开发者 容器
鸿蒙应用开发从入门到实战(十四):ArkUI组件Column&Row&线性布局
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Column和Row组件的使用以及线性布局的方法。
663 12
|
8月前
|
API 数据处理
鸿蒙应用开发从入门到实战(十三):ArkUI组件Slider&Progress
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解滑块Slider和进度条Progress组件的使用。
324 1
|
11月前
|
JavaScript 开发工具 开发者
【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例
【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例
430 3
|
11月前
|
开发者
鸿蒙仓颉开发语言实战教程:自定义组件
本文介绍了如何在仓颉开发语言中创建自定义组件,以封装和管理项目中的 tabbar 组件为例。通过创建独立的组件文件 yltabbar.cj,并使用 @Component 和 @Link 等修饰符实现组件化开发与参数传递,提升代码复用性和项目可维护性。适合希望深入掌握仓颉语言组件开发的 HarmonyOS 开发者学习参考。 #HarmonyOS #仓颉 #购物
|
缓存 数据安全/隐私保护 JavaScript
【HarmonyOS 5】鸿蒙页面和组件生命周期函数
【HarmonyOS 5】鸿蒙页面和组件生命周期函数
407 0
|
11月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
362 0
|
11月前
鸿蒙仓颉语言开发教程:页面和组件的生命周期
仓颉语言中的生命周期指页面或组件从加载到消失的过程。与ArkTs不同,仓颉需在生命周期方法前添加`protected open`修饰符,如`aboutToAppear()`、`onPageShow()`等。部分函数如`onBackPress()`返回布尔值,决定是否拦截系统返回操作。仅`@Entry`组件支持全部生命周期,普通组件仅支持`aboutToAppear`和`aboutToDisappear`。掌握正确写法可避免踩坑。
|
8月前
|
数据安全/隐私保护 开发者
鸿蒙应用开发从入门到实战(十一):ArkUI组件Text&TextInput
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解文本组件Text和TextInput的使用。
484 3
|
8月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
547 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
8月前
|
JavaScript
鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法
ArkUI除系统预置的组件外,还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。
352 7