当前位置: 首页 > 科技观察

OpenHarmony-ArkUI(TS)声明式开发画板

时间:2023-03-12 04:31:29 科技观察

了解更多开源请访问:开源基础软件社区https://ost.51cto.com项目介绍本项目基于OpenHarmony的ArkUI框架:TS扩展的声明式开发范式。语法和概念可以参考官网官方文档地址:DeclarativedevelopmentparadigmbasedonTSextension,因为OpenHarmony的API与HarmonyOS的API相比,功能比较完善和成熟,一些新技术也较早的被曝光,所以本项目直接使用OpenHarmonySDK开发。工具版本:DevEcoStudio3.0Beta4。SDK版本:3.1.6.6(API版本8发布)。项目功能:1.画笔功能:可以设置画笔的粗细和颜色;2.橡皮擦功能:粗细可设置;3.提现提现功能;4:清空画板功能。文档描述了效果演示中使用的APIcanvas组件canvas:canvas组件用于自定义绘制图形。方法/属性解释beginPath()创建新的绘图路径moveTo()path从当前点移动到指定点lineTo()连接从当前点到指定点的路径stroke()执行边框绘制操作clearRect()清除canvasstrokeStyle属性:设置描边的颜色lineWidth属性:设置绘制线条的宽度globalCompositeOperation属性:设置合成操作的方法实现思路1.使用画笔功能的onTouch方法监听触摸事件,按下手指:使用moveTo方法记录起点,移动手指:使用beginPath方法创建新路径,lineTo记录移动点并绘制。(代码片段,详情请查看源码):/***touchevent*/onTouchEvent(event:TouchEvent){//x坐标constx=event.touches[0].x//y坐标consty=event.touches[0].yswitch(event.type){caseTouchType.Down://手指按下{//创建新的绘图路径this.crc.beginPath()//设置起点坐标this.crc.moveTo(x,y)}中断;caseTouchType.Move://手指移动caseTouchType.Up://手指向上{//设置移动点this.crc.lineTo(x,y)//执行路径绘制this.crc.中风()}打破;默认值:中断;}}2.橡皮擦函数设置绘图属性:globalCompositeOperation。画笔设置这个属性值:source-over(默认值在现有绘图内容之上显示新绘图内容),橡皮擦设置这个属性值:destination-out(在新绘图内容之外显示现有绘图内容)。//新的内容在之前的内容之上this.crc.globalCompositeOperation='source-over'//新的内容和之前的内容的交集位置变透明this.crc.globalCompositeOperation='destination-out'3.撤回以及withdraw函数Data类,记录了每次绘制的信息,线条颜色,宽度,坐标点集合,每次绘制完成后保存在一个数组中。/***绘图信息*@paramlineColor线条颜色*@paramlineWidth线宽*@paramlistCoord坐标点集*/exportclassDrawInfoModel{//是否是画笔,是:画笔,否:橡皮擦//根据此字段设置绘图属性:复合操作globalCompositeOperationisPen:boolean;//线条颜色lineColor:string;//线宽lineWidth:number;//坐标点集合listCoord:Array;构造函数(isPen:布尔值,lineColor:字符串,lineWidth:数字,listCoord:Array){this.isPen=isPen;this.lineColor=lineColor;this.lineWidth=lineWidth;this.listCoord=listCoord;}}/***坐标点*@paramx坐标点x*@paramy坐标点y*/exportclassCoord{//坐标点xx:number;//坐标点yy:number;构造函数(x:数字,y:数字){this.x=x;这个.y=y;}}每张图的信息保存在数组中。当您点击提现时,提现次数+1;(代码片段,具体请查看源码):/***Revocation*/revocation(){this.listTempXY=this.listAllXY......//根据取款次数,截取数组this.listTempXY=这个。listTempXY.slice(0,this.listTempXY.length-this.revocationNumber)//清除画布this.crc.clearRect(0,0,this.canvasWidth,this.canvasHeight)//拼接描边路径for(constdrawInfoofthis.listTempXY){//创建新的绘图路径this.crc.beginPath()//设置线条颜色this.crc.strokeStyle=drawInfo.lineColor//设置线条宽度this.crc.lineWidth=drawInfo.lineWidth//设置绘图的坐标点for(leti=0;i