HarmonyOs - ArkUI(JS)画布组件canvas之自定义柱状图 原创 精华
中软小助手
发布于 2022-5-18 10:38
浏览
3收藏
作者:梁青松
前言
最近项目中有柱状图的功能,看了下JS中的组件chart,发现并不适用要求,研究之后决定用canvas动手画一个。
项目说明
本项目基于ArkUI中JS扩展的类Web开发范式,关于语法和概念直接看官网官方文档地址:基于JS扩展的类Web开发范式1 基于JS扩展的类Web开发范式2
工具版本:DevEco Studio 3.0 Beta2
SDK版本:3.0.0.1(API Version 7 Beta2)
提供画布组件,用于自定义绘制图形:画布组件canvas
效果演示
默认选中第一条,点击柱状图,切换选中效果。
但是发现绘制复杂一点的内容,调用清屏接口clearRect()后,重新绘制内容会闪烁,在官网论坛上面问了其他人,也都有遇到此问题,希望官方早点修复这个bug
使用到的API
方法/属性 | 解释 |
---|---|
getBoundingClientRect() | 获取组件大小和位置信息 |
getContext() | 获取canvas绘图上下文对象 |
save() | 对当前的绘图上下文进行保存 |
beginPath() | 创建一个新的绘制路径 |
moveTo() | 路径从当前点移动到指定点 |
lineTo() | 从当前点到指定点进行路径连接 |
stroke() | 进行边框绘制操作 |
arc() | 绘制弧线路径 |
fill() | 对封闭路径进行填充 |
restore() | 对保存的绘图上下文进行恢复 |
strokeStyle | 属性:设置描边的颜色 |
lineWidth | 属性:设置绘制线条的宽度 |
fillStyle | 属性:指定绘制的填充色 |
font | 属性:设置文本绘制中的字体样式 |
textAlign | 属性:设置文本绘制中的文本对齐方式 |
lineCap | 属性:指定线端点的样式 |
实现步骤
组件设置了上下左右间距,所以内容区域宽度 = 组件宽度 - 左间距 - 右间距,内容区域的高度 = 组件高度 - 上间距 - 下间距
1、画横线(x轴)、右边的文字
2、画圆柱图、和底部文字
3、点击选中效果:画柱图时,记录x轴的位置
根据触摸事件的坐标,判断是否在范围内,更新选中的索引
项目地址
完整代码:https://gitee.com/liangdidi/HistogramDemo
总结
此项目并没有特别复杂的地方,注释也很详细,主要是xy轴的起始、结束位置的计算,屏幕的原点坐标(0,0)是在左上角,最后根据系统提供的api画出想要的效果。有些效果看起来很复杂,但是一步一步的拆解,懂得其原理之后,多练多用,也能做出炫酷的效果。
每天进步一点点、需要付出努力亿点点。
更多原创内容请关注:中软国际 HarmonyOS 技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-5-18 10:41:34修改
赞
6
收藏 3
回复
6
2
3
相关推荐
自己画也太酷了,感谢大佬分享方法
非常实用