1 Star 1 Fork 0

ScenarioSamples/CanvasDemo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

模拟草稿画板

介绍

本示例模拟草稿画板,实现画布线条绘制和双指滑动,线条可以回撤,删除和保存

效果预览

img.gif

约束与限制

1.本示例仅支持标准系统上运行,支持设备:华为手机。

2.DevEco Studio版本:DevEco Studio 5.0.1 Release及以上。

3.HarmonyOS SDK版本:HarmonyOS 5.0.1 Release SDK及以上。

实现思路

1.利用Canvas组件构建画板,使用RenderingContext在Canvas组件上进行绘制。

在Canvas组件的onReady事件中初始化Canvas相关配置,onTouch事件中进行绘制

2.橡皮擦功能实现

this.canvasContext.globalCompositeOperation = 'destination-out';
this.paintSize = CommonConstants.ERASER_PAINTSIZE;
this.isStoke = false

3.清屏功能实现

this.canvasContext.clearRect(0, 0, 375, 720)

4.撤回功能实现:采用清除所有线条再绘制的形式实现

this.canvasContext.clearRect(0, 0, 375, 720);
this.pathArray.pop()
for (let i = 0; i < this.pathArray.length; i++) {
  this.canvasContext.beginPath();
  this.canvasContext.stroke(this.pathArray[i])
  this.canvasContext.closePath();
}

5.保存上次画板功能实现

绘制时,使用toDataURL方法生成一个包含图片展示的URL,同时使用用户首选项将该URL保存,在aboutToAppear生命周期中获取该URL即可实现。

this.toDataURL = this.canvasContext.toDataURL('image/png', 0.92)
dataPreferences.putSync('url', this.toDataURL)

aboutToAppear(): void {
this.toDataURL = dataPreferences.getSync('url', 'default') as string
this.img = new ImageBitmap(this.toDataURL)
}

工程目录

├─entry/src/main/ets 、
│ ├─common
│ │ └─Constants.ets // 常量
│ ├─entryability                
│ │ └─EntryAbility.ets // 程序入口
│ ├─pages                             
│ │ └─Index.ets // 主页
│ │ └─CanvasDemo.ets // 画板页
│ │ └─SavePage.ets // 保存页
│ ├─utils
│ │ └─Logger.ets // 日志工具

参考文档

-Canvas -CanvasRenderingContext2D -用户首选项

ChangeLog

修改内容 时间
README修改 2025.3.4

空文件

简介

【鸿蒙 Harmony Next 示例 代码】本示例模拟草稿画板,实现画布线条绘制和双指滑动,线条可以回撤,删除和保存。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/scenario-samples/canvas-demo.git
git@gitee.com:scenario-samples/canvas-demo.git
scenario-samples
canvas-demo
CanvasDemo
master

搜索帮助