如何通过OpenHarmony的Cavas组件实现相应的绘制能力。

567 篇文章 5 订阅
555 篇文章 0 订阅

介绍

基于OpenHarmony的Cavas组件封装了一版极简操作的MiniCanvas,屏蔽了原有Canvas内部复杂的调用流程,支持一个API就可以实现相应的绘制能力,该库还在继续完善中,也欢迎PR。

使用说明
  1. 添加MiniCanvas依赖

    在项目entry目录执行如下命令安装MiniCanvas库:

    npm install git+https://gitee.com/ark-ui/MiniCanvas.git

  2. 引入MiniCanvas

    import { MiniCanvas, Paint, ICanvas } from '@ohos/mini_canvas'

  3. 使用MiniCanvas

    @Entry @Component struct TestMiniCanvas {
      build() {
        Column() {
          MiniCanvas({
            onDraw: (canvas) => {
              
            }
          })
        }
        .size({width: "100%", height: "100%"})
      }
    }

  4. MiniCanvas绘制

    // import { MiniCanvas, Paint, ICanvas } from '@ohos/mini_canvas'
    // 源码方式引入
    import { MiniCanvas, Paint } from "./mini_canvas"
    
    @Entry @Component struct TestMiniCanvas {
      build() {
        Column() {
          MiniCanvas({
            // 在onDraw()方法内执行绘制
            onDraw: (canvas) => {
              // 创建画笔
              let paint = new Paint()
    
              // 绘制直线
              paint.setColor("#FF0000");
              paint.setStrokeWidth(5);
              canvas.drawLine(10, 10, 280, 10, paint);
    
              // 绘制圆以及圆环
              canvas.drawCircle(50, 50, 25, paint);
              paint.setStroke(true);
              paint.setStrokeWidth(3);
              canvas.drawCircle(250, 50, 25, paint);
    
              // 绘制椭圆以及椭圆环
              paint.setStroke(false);
              canvas.drawOval(20, 100, 150, 50, paint)
              paint.setStroke(true);
              paint.setColor(Color.Pink.toString())
              canvas.drawOval(190, 100, 150, 50, paint)
    
              // 绘制矩形
              paint.setStroke(false)
              canvas.drawRect(20, 180, 150, 50, paint)
              paint.setStroke(true)
              paint.setStrokeWidth(5)
              canvas.drawRect(190, 180, 150, 50, paint)
    
              // 绘制圆角矩形
              paint.setStroke(false);
              canvas.drawRoundRect(20, 250, 150, 50, 10, paint)
              paint.setStroke(true);
              canvas.drawRoundRect(190, 250, 150, 50, 10, paint)
    
    
              // 绘制圆弧
              canvas.drawArc(80, 330, 40, 0, 135, paint);
              paint.setStroke(false);
              canvas.drawArc(250, 330, 40, 0, 135, paint);
    
              // 绘制图片
              let bitmap = new ImageBitmap("pages/test.jpg")
              canvas.drawImage(bitmap, 10, 10, 800, 600, 20, 400, 320, 160, paint)
            },
            // 设置画布的属性
            attribute: {
              id: "mini_canvas",
              width: "100%",
              height: "100%",
              background: "#ffffff",
              clickListener: (event) => {
                console.log("onClicked: " + JSON.stringify(event));
              },
              touchListener: (event) => {
                console.log("onTouched: " + JSON.stringify(event));
              }
            },
          })
        }
        .size({width: "100%", height: "100%"})
      }
    }

  5. 运行结果

    sample

最后

随着鸿蒙开发越来越火热,我了解到现在有很多小伙伴想入行鸿蒙,但又不知道学习哪些鸿蒙开发技术?所以我给大家整理了一份鸿蒙Next全套VIP学习资料

资料包含了:【OpenHarmony多媒体技术、Stage模型、ArkUI多端部署、分布式应用开发、音频、视频、WebGL、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

有需要的小伙伴自行领取:获取完整版方式请点击→《 鸿蒙Next全套VIP学习资料

1.鸿蒙核心技术学习路线

2.大厂面试必问面试题

3.鸿蒙南向开发技术

 4.鸿蒙APP开发必备

 5.HarmonyOS Next 最新全套视频教程

 6.鸿蒙生态应用开发白皮书V2.0PDF

这份全套完整版的学习资料已经全部打包好,朋友们如果需要可以点击鸿蒙Next全套VIP学习资料:免费领取(安全链接,放心点击

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的多边形绘制组件的Vue代码,它使用Canvas API绘制多边形: ```html <template> <div> <canvas ref="canvas" @mousedown="startDrawing" @mousemove="draw" @mouseup="endDrawing"></canvas> </div> </template> <script> export default { name: 'PolygonDrawing', props: { sides: { type: Number, default: 5 }, radius: { type: Number, default: 100 }, color: { type: String, default: '#000000' } }, mounted() { this.canvas = this.$refs.canvas; this.ctx = this.canvas.getContext('2d'); this.drawPolygon(); }, methods: { drawPolygon() { const centerX = this.canvas.width / 2; const centerY = this.canvas.height / 2; const angle = (2 * Math.PI) / this.sides; this.ctx.beginPath(); this.ctx.moveTo(centerX + this.radius, centerY); for (let i = 1; i <= this.sides; i++) { const x = centerX + this.radius * Math.cos(i * angle); const y = centerY + this.radius * Math.sin(i * angle); this.ctx.lineTo(x, y); } this.ctx.strokeStyle = this.color; this.ctx.stroke(); }, startDrawing(event) { this.isDrawing = true; this.ctx.beginPath(); this.ctx.moveTo(event.offsetX, event.offsetY); }, draw(event) { if (!this.isDrawing) return; this.ctx.lineTo(event.offsetX, event.offsetY); this.ctx.strokeStyle = this.color; this.ctx.stroke(); }, endDrawing() { this.isDrawing = false; } }, watch: { sides() { this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); this.drawPolygon(); }, radius() { this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); this.drawPolygon(); }, color() { this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); this.drawPolygon(); } } }; </script> ``` 该组件包含三个 props: - `sides`:多边形的边数,默认为 5。 - `radius`:多边形的半径,默认为 100。 - `color`:绘制多边形和边的颜色,默认为黑色。 在 `mounted` 钩子中,我们获取到 `canvas` 元素和它的 2D 上下文对象 `ctx`。然后我们调用 `drawPolygon` 方法来绘制一个多边形。 `drawPolygon` 方法中,我们首先计算多边形的中心点坐标,然后使用 `moveTo` 和 `lineTo` 方法绘制多边形的每个顶点之间的线段,最后使用 `stroke` 方法来绘制多边形的边框。 在鼠标事件处理函数中,我们使用 `isDrawing` 状态来标记是否正在绘制。在 `startDrawing` 中,我们开始新的路径并将它的起点设为鼠标点击的位置。在 `draw` 中,如果正在绘制,我们使用 `lineTo` 方法来连接当前鼠标位置和上一个鼠标位置,并使用 `stroke` 方法绘制线段。在 `endDrawing` 中,我们将 `isDrawing` 状态重置为 `false`,表示绘制已经结束。 最后,我们使用 `watch` 监听器来监测 props 的变化,并在变化时重新绘制多边形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值