开发者网站发布了与UI相关的培训指南,这是索引:
如果您对以下任何一项感兴趣,请点击此链接: https://developer.android.com/training/animation/
我找到了5种在Android中制作动画的方法:
使用Property Animation动态View
的属性,以平滑地更改rotation
,alpha
,scale
等
帧动画(AnimationDrawable):快速更改图片,使其看起来像动画
使用<{3}}随时间编辑向量(VectorDrawable)和动画来设计图像。
在onDraw()
上覆盖 View
并在画布上绘画执行AnimatedVectorDrawable。
使用Custom Drawing,从After Effects中复制动画。许多动画可在Lottie获得。
但是,Android也提供了一些内置工具,例如LottieFiles(可让您在共享Views
的多个布局之间设置转换动画),{{ 3}}(这可以让您将View
从Activity
传递到另一个scale
等等。
API 21 中添加了许多(如果不是全部)这些功能,请点击此处Scenes
以获取更多信息。
以下是一些有趣的动画文章/博客:
Google制作网站上的一个子类别Shared elements
:here。
material.io:使用动画矢量训练动画。
How we design a beautiful animation:带矢量的蓝牙动画
How Android Transitions work:通过图像旋转填充心脏。
最后,有几个有趣的工具:
用于在Animating to infinity上记录Android屏幕的Mac工具。
视频到GIF转换器Frame Animations in Android。
我知道Android提供了alpha
,rotate
,translation
,Path
等转换。
我想查看并比较两个例子。
例如,适用于Android的StackExchange App,登录屏幕动画(无法在其上找到视频,也没有检查iOS中的行为是否相同)。
对于第一个示例,除了播放GIF之外,我无法想到任何其他方式,或者在很短的时间段后手动更改图像。
我不认为是这种情况,这就是我想问的原因,(1)你知道它是怎么做的吗?
关于第二个例子,我只想到了一个想法,并设置View
并相应地移动animate()
,在Scene transitions
之后以某种方式传递dismissViewController
。 (2)这可能吗?
除了上面提到的,(3)你知道其他播放动画的技巧吗? (例如答案中提到的{{1}} - - )
请分享!谢谢。
答案 0 :(得分:10)
“填满一杯水”动画直接鼓励通过帧动画实现,即一个接一个地改变图片。 Here你可以看到一篇很好的博客文章,描述如何实现这种动画,这与你提到的“填满一杯水”基本相同:
乍一看,其他动画看起来有些困难。
但是在打开“Show layout bounds”之后你可以看到那里没有魔法。基本上这只是一个翻译动画,它将视图从一个位置转换为另一个位置。在该动画的情况下,困难的部分是实现找到平移坐标的算法。之后,通过scene transition animation制作动画只需几行代码。
// assuming at this step all the views are at the initial position at x0, y0
TransitionManager.beginDelayedTransition(rootLayout);
// here set view coordinates to x1, y1 - the final position
Transitions框架将为您完成剩下的工作。它会找到delta并为您执行动画。 Here你会在Lucas Rocha找到一篇很好的文章。
答案 1 :(得分:6)
你知道其他播放动画的技巧吗?
在Android中,您基本上有3种方法可以实现动画:
view.startAnimation(...)
显然,通过框架方法动画视图比创建一些可绘制动画更容易,创建一些drawable(xml)比自定义绘图更容易。
你提到了几天前刚出来的lottie。我们将看到它有多好,但它看起来非常有前景。在引擎盖下,lottie将解析json并使用Canvas
和Path
(上面的第3个子弹点)进行一些自定义绘图
如果你可以得到After Effects,这可能是最简单的&#34;复杂动画的解决方案(和跨平台!)
人们也开始分享动画,你可以在这里找到它们:
http://www.lottiefiles.com/
你知道它是怎么做的吗?
(1)视频看起来像是自定义绘图。
Path
水,在动画顶部时用一些波浪制作动画,并撒上一些白点。这将涉及创建一个自定义视图和/或可绘制和覆盖onDraw(Canvas)
Path.lineTo
以及一些弧形,立方体或四边形将做的诀窍......我也不是设计师也不是矢量专家:)
我不认为使用animated vector drawables可以很容易地实现这一点,但您可以通过应用路径变形动画来完成它。 (如果我没有记错的话,动画矢量绘图只支持21+)
(2)视频只是动画一个路径并摆动一个标志。这可以通过使用AnimatedVectorDrawables(例如this blog节目)并通过做出自定义绘图(并因此也支持前lolipop设备)通过动画路径来修剪路径开始/结束或再次实现,例如,使用PathMeasure.getSegment()
连续制作路径动画。
正如azizbekians answer已经指出的(3)动画是第一种提到的动画,只是动画(移动和缩放)视图。
关于第二个例子,我只想到了一个想法,那就是设置一个Path并相应地通过在animate()之后以某种方式传递它来移动View。 (2)这可能吗?
显然可以沿着路径移动视图,但是视图会移动,您仍然需要找到一种方法来绘制跟随它的路径,如上所述。
答案 2 :(得分:1)
我想建议一个我刚刚写过的图书馆(最近发布),它允许您创建自定义视图并为其添加动画。
您可以找到here和非常simple demo here。 虽然我的演示坦率地说并不令人印象深刻,但他们展示了图书馆的力量,最重要的是如何使用它。
适用于Android的TimeInterpolator及其任何子级(以及自定义的子级)。
动画完全使用Canvas绘制,唯一的区别是你可以获得一个动画值,它根据TimeInterpolator随时间变化。
您可以根据自己的意愿添加任意数量的动画,并相互独立地控制它们。最重要的是,您不仅限于绘制非动画内容。有一个专门的方法(onDrawStatics)。
答案 3 :(得分:-2)
对于您的自定义视图,我建议您标识要进行动画处理的属性。
让我们说一下ClockView,You After在OnDraw()
中设置绘画,描边等等
您可能希望AsyncMethods / Runnables在后台连续更新属性,从而产生逐帧动画,但实际上并不是Fraame动画,因为您只动画视图的属性(向左转)和不是他提出框架
那里有几十个例子,你可以通过微笑谷歌搜索