
回复
习惯了 Android 的 Canvas,用鸿蒙的 canvas 多少有点别扭
效果图
上面的图是用 transform 属性做的动画
下面的图是用 canvas 画的,参考自https://mp.weixin.qq.com/s/p_gy8s1SqPUTAa3wCIk7FQ
众所周知,我们在手机或者平板上看到的 3D 动画只是在二维的投影,我们只需要计算好运动物体的大小和位置的对应关系,就可以实现类似 3D 的效果。想要了解具体的算法以及映射关系,可以阅读原文。
根据参考文章中的计算方式,我们只需要移植一下就行。这里是根据总结
中的代码实现的
原文中的关键代码
清楚了原理及计算方式,实现起来就简单了
先 stack 堆叠两个圆球,小球需要不断运动,x、y、z需要一直变化,使用@State
修饰一下。值的变化过程就用上面原文中的计算方法。定时更新就用setInterval
,组件的位移变化给我们提供了transform
方法,需要一个matrix4
对象,移动变化也不需要我们去填充矩阵,有对应的translate
方法,组合起来代码如下:
需要注意的是,鸿蒙里面的 math 包下没有toRadians
方法,需要我们自己实现一下
定时更新这里用了setInterval
鸿蒙的 canvas 中也没有画笔的概念,需要设置RenderingContextSettings
实例的填充方式及填充颜色
鸿蒙的 canvas 中也没有 drawcircle 方法,这里使用的是Path2D
对象中画圆弧方法(arc)然后填充颜色的方式,需要注意是Path2D.arc()
中的角度单位
整体流程如下
下面是全部代码