HarmonyOS使用ArkUI绘制圣诞树
一、前言
起因我参加了 “挑战代码画颗圣诞树” 活动,又因为本次推出一个“圣诞定制勋章”活动,一个是传资源,一个是写文章,为了更好的把知识传递给大家,所以我又出了这篇文章,大家进来一起学习一下吧。
二、创意名
基于HarmonyOS的ArkUI(方舟UI)
+ SVG相关技术知识点绘制圣诞树
三、效果展示
四、实现步骤
我们使用SVG数据 点击查看
我们简单看下整个 SVG 内容的组成:
那么我们知道这个SVG内容组成,如何通过HarmonyOS的ArkUI去绘制呢?
我们在HarmonyOS的绘制组件中找到下面这几个可以操作路径数据
点击查看绘制组件文档
我们接着看,我们看到 ellipse
下面的第一个 path
的路径数据:
M260,185c0,0,2.5-0.8,6.7,2.6c4.3,3.4,121.1,81.2,121.1,81.2s4,3.9,1.6,9.6C387,284,383,286,383, 286s-49,41-123,41c-76,0-123-42.2-123-42.2s-6.1-2.8-6.5-6.8s-0.4-7.3,2.6-10.1c3-2.9,12
0.1-80.1,120.1-80.1S255,185,260,185z
这个时候我们就需要用到 Path 的属性 commands 设置我们的路径数据:
Path().commands("M260,185c0,0,2.5-0.8,6.7,2.6c4.3,3.4,121.1,81.2,121.1,81.2s4,3.9,1.6,9.6C38
7,284,383,286,383,286s-49,41-123,41c-76,0-123-42.2-123-42.2s-6.1-2.8-6.5-6.8s-0.4-7. 3,2.6-10.1c3-2.9,120.1-80.1,120.1-80.1S255,185,260,185z").fill('#42CE8E')
设置之后,我们可以看到,绘制出来的内容如下:
看完发现,这太简单了吧,哈哈哈,那么 ellipse 如何绘制呢?
我们看第一个 ellipse 的内容:
<ellipse id="tree-base" fill="#39445B" cx="259.5" cy="319" rx="120" ry="38"/>
那么我们如何使用呢?又该如何使用里面的数据呢?
我们先看看 SVG 里面的 ellipse 元素里面的内容含义:SVG:可缩放矢量图形 - ellipse
那么,HarmonyOS 里面的 ArkTS 如何绘制这个 ellipse 元素?
我们通过 SVG 里面的内容可以计算出来 width/height:
Width = 120 * 2 => 240px
Height = 38*2 => 76px
这个时候还不够,我们知道 SVG 里面设置了 cx
和 cy
中心点坐标。
那么这个 cx 和 cy,在 HarmonyOS 里面如何设置?
我们通过 HarmonyOS 的文档的通用属性里面找到如下属性:
那么这个 x 和 y 如何计算出来?
X = 259.5-120 => 139.5px
Y = 390 - 38*2 => 314px
那么我们进行如下代码设置:
Ellipse({width: '240px', height: '76px'
}).fill('#39445B')
.offset({x: '139.5px', y: '314px'
})
运行之后,看到效果如下:
我们在 SVG 里面还看到 2 个新的元素
Circle、Polygon 那么这 2 个如何使用呢?
我们根据上面的内容,同样的可以应用到 Circle 和 Polygon 里面,
如果我们使用下面这个 Circle:
<circle id="l1-r4-s2" class="shadow-2" opacity="0.5" fill="#FFDF9F" cx="146" cy="256"
r="15"/>
这个 Circle 里面的内容都代表什么内容呢?点击查看
同样的 HarmonyOS 里面也有 Circle 绘制组件
Width = 15 * 2 => 30px
Heigth = 15 * 2 => 30px
同样的中心点,我们可以通过 offset
进行位置调整
X = 320 - 15 => 305px
Y = 286 - 15 => 271px
Circle().size({ width : '30px', Height: '30px'})
.fill('#FFDF9F')
.fillOpacity(0.5)
.offset({x:'305px', y:'271px'
})
polygon 不同,我们只需要设置 point
点坐标类型。
HarmonyOS 文档里面的 polygon,点击查看
SVG 里面的内容:
<polygon id="gift-red-side-shadow" fill="#D10F50" points="335,345 315,339 315,319
335,323"/>
我们直接使用里面的坐标即可。
Polygon()
.fill('#D10F50')
.points([['335px','345px'],['315px','339px'] ,['315px','319px'], ['335px','323px']])
我们把上面用到的知识点,用到我的项目中,SVG中有g元素标签的,使用Shape绘制组件,其他的在HarmonyOS文档中查找到和SVG同名的组件进行绘制。
我们看到,我们点击小猫咪的时候,它会进行躲藏,这里同时使用到了ArkUI的显示动画
我们通过下面animateTo的方式进行 躲藏
和 探头
动画:
animateTo({duration: 500,curve: Curve.EaseOut,iterations: 1,playMode: PlayMode.Normal,onFinish: () => {// 设置一个超时机制,如果这个时间范围内,没有点击,则触发小猫探头this.timerId = setTimeout(() => {animateTo({duration: 400,curve: Curve.EaseOut,iterations: 1,playMode: PlayMode.Normal,}, () => {// 探头,哈哈哈this.catAnimationModel = {...this.catAnimationModel,translateY: '0px'}})}, 800)}}, () => {// 躲猫猫this.catAnimationModel = {...this.catAnimationModel,translateY: '60px'}})
在Shape绘制组件中添加 translate属性方法
,大致如下:
Shape(){....}.translate({y: this.viewModel.getCatTranslateY()}).viewPort({width: '520px',height: '390px'})
只要执行了animateTo,我们的猫咪就可以进行躲藏和探头了。
点击下载HarmonyOS绘制圣诞树源码
感兴趣的同学,可以去学习我们的另一篇文章:HarmonyOS玩转ArkUI动效 - 水母动画
HarmonyOS使用ArkUI绘制圣诞树相关推荐
- python turtle绘制圣诞树,就一棵破松树
这里写自定义目录标题 python turtle绘制圣诞树 思路 代码 python turtle绘制圣诞树 思路 画三角形,从小到大,画,没了 代码 import turtle as tdef pa ...
- python绘制圣诞树、烟花、爱心及节日倒计时
说明: 该博客主要完成以下几个方面的功能: 1.元旦节日倒计时代码的实现 2.使用python源码"绘制圣诞树" 3.使用python绘制"跨年烟花" 4.使用 ...
- Python实现使用turtle绘制圣诞树
简单的绘制圣诞树 新建tree1.py或者直接输入下面代码运行 #声明树的高度 height = 5 #树的雪花数,初始为1 stars = 1 #以数的高度作为循环次数for i in range( ...
- PHP绘制圣诞树 圣诞树(油画效果)
关于绘制圣诞树,关键点在于像素点的对称堆积和基础像素点的排版 实现过程截图: 主方法: 第一阶段:思考最开始有两种构想,第一种是使用GD库,第二种就是直接输出像素点,直接在页面上展示 然后我 ...
- 分享10个Python绘制圣诞树的源码,拿来即用
大家好,我是丁小杰. 圣诞节就要到了,作为一个的"程序猿",怎么能够少得了绘制圣诞树呢,今天就和大家分享 10 个圣诞树的绘制源码,拿来即用! 搞笑版 height = 5 sta ...
- 《Turtle绘图》Python用Turtle库绘制圣诞树、圣诞节考研祝福礼物
Python用Turtle库绘制圣诞树.圣诞节考研祝福礼物 当圣诞节遇上考研.遇上海龟绘图,于是有了本文的内容.圣诞节是固定的12月25日,而考研是12月底的某个周末.能不能用Python制作一个祝福 ...
- 如何用Python绘制圣诞树(极其鬼畜视频) - B站小视频
如何用Python绘制圣诞树(极其鬼畜视频)
- Python绘制圣诞树
python绘制圣诞树终章 一位朋友送给相爱18年的闺蜜的圣诞树,是定制款呐 # 袜子 seth(-20) pensize(2) penup() goto(-30, 130) pencolor(&qu ...
- 【turtle库】Python绘制圣诞树
写在前面: 1.圣诞节快到了,赶紧画个圣诞树给喜欢的人吧! 2.本文仅供学习用,如果代码写的有不好的地方,希望大佬指导改正. 3.代码在下面,需要自取,会附带一部分代码解释,简单易懂,欢迎各位按照自己 ...
最新文章
- linux上的定时器上的jiffies,linux定时器和Jiffies汇.doc
- C#面向对象9 字符串
- 离职后才搞懂vue项目开发流程中的疑惑点
- linux man手册_读书笔记:Linux命令行与shell脚本编程大全 第一章~第五章
- CPU分时、中断和上下文切换
- 「Ubuntu: Conda」Conda相关命令
- Linux实用命令总结
- G - Tiling FZU - 2040(未解决)
- Linq动态查询与模糊查询
- 破除“论文至上”!两部委发文规范SCI指标使用
- oracle em 删除 重建,Oracle 11g 重建EM需要删除的对象
- 计算机十进制例子,verilog给你举个最简单的例子:以十进制计算为例:14
- @开发者 争抢技术红利,百度自研 4 款人脸硬件要和大家见面了!
- 酷派春雷com.yulong.android,酷派7260 (春雷)一键刷机教程,亲测可用
- 英文诗------(Love‘s Secret)爱的秘密------William Blake(英国诗人:威廉.布莱克)
- IT小知识:文件扩展名小知识大全(A~Z)文件扩展名大全
- 电力-输配电知识汇总
- 职场7条小tips,一定有一条说到你心坎里
- YY直播产品体验报告
- mybatis where 标签使用
热门文章
- 减肥要吃...淡化色斑要吃....皮肤干燥要吃...长了小痘痘要吃...整天对着电脑要吃...记住这些
- Kali开机后的初始化配置
- docker部署微服务
- 树梅派硬件学习_xbox手柄驱动
- 大事发生,程序员一直在守护世界
- LIME Low light Image Enhancement via Illumination Map Estimation
- CoinCola可盈可乐研究院2月报 | 加密货币集体上涨
- vue项目,解决IE浏览器报Promise未定义的错误
- CentOS 7下安装Tomcat8.0.53并设置自动启动:
- 微信小程序实现朋友圈图片展现形式