如何在 Android Canvas 中制作动画?

发布于 2024-10-14 19:43:45 字数 192 浏览 0 评论 0原文

我想在 Android Canvas 或其他方便的对象上以每秒约 30 帧的速度绘制一些东西。在我的应用程序中,绘制了不同的图形对象,如果触摸任何图形对象,图形对象就会改变其形状。我看了看 View 子类的 onDraw(Canvas canvas) 回调,但调用 invalidate() 在这里没有帮助:首先我无法控制帧速率,其次如果对象移动太快,运动会显得不稳定。

I want to draw something at about 30 frames per seconds on Android Canvas or other convenient object for this purpose. In my application different graphic objects are drawn and if any of the graphic object is touched, the graphic object changes its shape. I looked at the
onDraw(Canvas canvas) callback of View subclass but calling invalidate() does not help here: first I cannot control the frame rate and second if the objects are moving too fast, the motion appears jerky.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初雪 2024-10-21 19:43:45

我个人不喜欢Android内置的Animation类,所以我倾向于用Canvas手动完成所有动画。我发现最幸运的是创建一个要在动画中使用的图像列表,然后创建一个 int 变量来存储您所在的当前“帧”。为了推进帧,我创建了一个休眠 30 毫秒的线程,然后相应地更新帧变量。然后,在您使用的任何更新处理程序中,您只需创建一个 switch 语句或类似的语句,并绘制相应的框架。

这可能看起来工作量很大,但实际上并非如此。将所有这些都塞进一堂课中,您会爱上自己的许多动画。

I personally dislike Android's built-in Animation classes, so I tend to do all animations with Canvas by hand. I have found the most luck with creating a list of the images you want to use in your animation and then an int variable to store the current "frame" you are on. To advance the frame, I create a thread that sleeps for, say, 30 ms and then update the frame variable accordingly. Then in whatever update handler you are using, you can just create a switch statement or something of the like, and draw the respective frame.

It may seem like a lot of work, but it really isn't. Shove it all into a class and you will love yourself for many animations to come.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文