我发现了5种在Android中animation的方法:
使用“ 属性animation” View
animation的属性 ,以平滑地更改rotation
, alpha
, scale
等。
帧animation ( AnimationDrawable ):快速更改图片,使其看起来animation
使用vector ( VectorDrawable )devise图像,并使用AnimatedVectorDrawable随着时间的推移对它们进行编辑来为它们设置 animation 。
覆盖 View
上的onDraw()
,并通过在canvas上绘画来执行自定义绘图 。
使用Lottie ,从After Effects中复制animation。 LottieFiles提供了许多animation。
但是,Android也提供了一些内置工具 ,例如Scenes
(可以让您在多个共享Views
布局之间进行animation转换), Shared elements
(可以让您将View
从一个Activity
传递到另一个Activity
)等等
API 21中添加了许多(如果不是全部)这些function,请点击这里获取更多信息。
这里有一些有趣的文章/animation博客:
Google制作的网站上的一个子类别叫做material.io : 创意定制 。
我们如何devise一个漂亮的animation :用animationvector来训练animation。
Android转换的工作原理
animation到无限 :蓝牙animation与vector
Android中的框架animation :通过图像旋转填充心脏。
最后,一些有趣的工具:
Mac工具在GitHub上录制Android屏幕。
video到GIF转换器在线 。
我知道Android提供了诸如scale
, alpha
, rotate
, translation
等translation
。
有两个例子我想看看和比较。
例如, 填满一杯水或画一条路 。
例如,Android的StackExchange应用程序,login屏幕animation(无法find它的video,也没有检查,如果在iOS中performance相同)。
对于第一个例子,除了播放GIF或者在一段时间之后手动改变图像之外,我想不出任何其他的方式。
我不认为这是事实,所以我想问一下, (1)你知道它是如何做的吗?
关于第二个例子,我只想到了一个想法,那就是设置一个Path
并通过在animate()
之后以某种方式传递View
相应地移动View
。 (2)这可能吗?
除了上面提到的, (3)你知道其他的animation技巧吗? (如Scene transitions
– 在答案中提到 ) –
请分享! 谢谢。
“填满一杯水”animation就是直接通过框架animation来实现的,即一个接一个地变换图片。 在这里你可以看到一篇不错的博客文章,描述如何实现这种animation,基本上就像你提到的“填满一杯水”一样:
其他的animation乍看起来有些困难。
但打开“显示布局界限”后,你可以看到那里没有魔法。 基本上这只是一个翻译animation,翻译从一个位置到另一个位置的视图。 在这个animation的情况下,困难的部分是实现查找翻译坐标的algorithm。 之后,animation只是通过场景转换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
转换框架将为您完成剩下的工作。 它会find三angular洲并为您执行animation。 在这里您可以findLucas Rocha的一篇不错的文章。
你知道其他技术来播放animation吗?
在Android中,基本上有3种实现animation的方法:
view.startAnimation(...)
来animation视图(缩放,alpha,旋转等view.startAnimation(...)
显然,通过框架方法animation视图比创build一些可绘制的animation更容易,创build一些可绘制的(xml)比自定义绘制更容易。
你提到了几天前刚刚出来的lottie。 我们将看到它有多好,但看起来非常有希望。 在引擎盖下,lottie将parsingjson,并使用Canvas
和Path
(上面的第三点)做一些自定义绘图
如果你能在After Effects上使用,这可能是复杂animation(和跨平台)的“最简单”解决scheme!
人们也开始分享animation,你可以在这里find它们:
http://www.lottiefiles.com/
你知道它是如何完成的吗?
(1)video看起来像他们做一些自定义绘图。
Path
,在animation时用一些波animation顶部,并洒上一些白色斑点。 这将涉及到创build一个自定义的视图和/或绘制和重写onDraw(Canvas)
Path.lineTo
以及一些弧,立方体或四将做的伎俩…我既不是devise师也不是vector专家:)
我不认为这很容易通过使用animationvector绘制 ,但你可以通过应用path变形animation来完成。 (如果我没有弄错的话,animationvectordrawables只支持21+)
(2)video只是一个道路的animation和摇摆的旗帜。 这可以通过使用AnimatedVectorDrawables(如本博客显示)和修剪path开始/结束或通过执行自定义绘图(因此也支持预处理器)来实现,例如使用PathMeasure.getSegment()
连续地animation的path。
(3)animation,正如azizbekians所指出的那样,是第一种提到的animation,就是animation(移动和缩放)视图。
关于第二个例子,我只想到了一个想法,那就是设置一个Path,并通过在animate()之后以某种方式传递视图来相应地移动View。 (2)这可能吗?
沿着path移动视图显然是可能的,但是随后视图会移动,并且您仍然需要find一种方法来绘制跟随它的path,如上所述。
我想build议一个我刚刚写过的库(最近发表),它允许你创build自定义视图并为它们添加animation。
你可以在这里find它,并在这里一个非常简单的演示 。 虽然我的演示坦率地说不是那么令人印象深刻,但它们展示了图书馆的力量,最重要的是如何使用它。
它适用于Android的TimeInterpolator及其子任何(和自定义一样)。
animation是完全使用Canvas绘制的,唯一的区别在于你可以得到一个animation值,它根据TimeInterpolator随着时间而变化。
你可以添加尽可能多的animation,你想要的视图,独立控制他们。 最重要的是,你不限于绘制非animation的东西。 有一个专门的方法(onDrawStatics)。
对于你的自定义视图,我build议你确定你想要animation的属性。
让我们来说一个ClockView,你在OnDraw()
设置paint,stroke等等之后,
您可能希望有AsyncMethods / Runnables在后台连续更新属性,导致逐帧animation,但实际上它不是Fraame Animation,因为您只animation了视图的属性(左转),而不是他镂空框架
有几十个例子,有了很less的谷歌search,你可以DIY