Jon*_*ate 19 java animation android android-animation android-layout
开发者网站发布了UI相关内容的培训指南,这是索引:
如果您对以下任何一项感兴趣,请访问以下链接:https: //developer.android.com/training/animation/
我找到了5种在Android中制作动画的方法:
动画的性能的View
同属性动画平滑地改变rotation
,alpha
,scale
等.
帧动画(AnimationDrawable):快速更改图片,使其看起来像动画
使用矢量(VectorDrawable)设计图像,并通过AnimatedVectorDrawable随时间编辑它们来制作动画.
使用Lottie,从After Effects中复制动画.LottieFiles提供了许多动画.
但是,Android也提供了一些内置工具,例如Scenes
(允许您在共享的几个布局之间设置转换动画Views
),Shared elements
(这可以让您将一个View
从一个布局传递Activity
到另一个布局)等.
API 21中添加了许多(如果不是全部)这些功能,请单击此处获取更多信息.
这里有一些有趣的动画文章/博客:
Google制作网站上的子类别名为material.io:广告素材自定义.
我们如何设计一个漂亮的动画:用动画矢量训练动画.
动画到无限:带矢量的蓝牙动画
Android中的帧动画:通过图像旋转填充心脏.
最后,一些有趣的工具:
我知道Android提供了转换,如scale
,alpha
,rotate
,translation
等.
我想看两个例子并进行比较.
例如,用于Android的StackExchange App,登录屏幕动画(无法在其上找到视频,也没有检查iOS中的行为是否相同).
对于第一个例子,我想不出除了播放GIF之外的任何其他方式,或者在很短的时间段之后手动更改图像.
我不认为是这种情况,这就是为什么我想问,(1)你知道它是如何完成的吗?
关于第二个例子,我只想到了一个想法,那就是通过以某种方式传递它来设置Path
并相应地移动View
它animate()
.(2)这可能吗?
除了上面提到的,(3)你知道其他播放动画的技巧吗?(如Scene transitions
- 在答案中提到 - )
请分享!谢谢.
azi*_*ian 10
"填满一杯水"动画直接鼓励通过帧动画实现,即一个接一个地改变图片.在这里你可以看到一篇很好的博客文章,描述如何实现这种动画,这与你提到的"填满一杯水"基本相同:
乍一看,其他动画看起来有些困难.
但在打开"Show layout bounds"之后,你可以看到那里没有魔法.基本上这只是一个翻译动画,它将视图从一个位置转换为另一个位置.在该动画的情况下,困难的部分是实现找到平移坐标的算法.之后动画只是通过场景转换动画的几行代码.
// 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
Run Code Online (Sandbox Code Playgroud)
Transitions框架将为您完成剩下的工作.它会找到delta并为您执行动画.在这里你会找到Lucas Rocha的一篇很好的文章.
你知道其他播放动画的技巧吗?
在Android中,您基本上有3种方法来实现动画:
view.startAnimation(...)
显然,通过框架方法动画视图比创建一些可绘制动画更容易,创建一些drawable(xml)比自定义绘图更容易.
你提到了几天前刚出来的lottie.我们将看到它有多好,但它看起来非常有前景.在引擎盖下,lottie将解析json并使用Canvas
和Path
(上面的第3个项目符号点)做一些自定义绘图
如果你可以使用After Effects,这可能是复杂动画(和跨平台!)的"最简单"解决方案.
人们也开始分享动画,你可以在这里找到它们:http:
//www.lottiefiles.com/
你知道怎么做的吗?
(1)视频看起来像是做了一些自定义绘图.
Path
水,在动画顶部时用一些波浪制作动画,并撒上一些白点.这将涉及创建自定义视图和/或可绘制和覆盖onDraw(Canvas)
Path.lineTo
以及一些弧形,立方体或四边形将做的诀窍......我既不是设计师也不是矢量专家:)
我不认为这可以通过使用动画矢量drawables轻松实现,但您可以通过应用路径变形动画来完成它.(如果我没有记错的话,动画矢量绘图只支持21+)
(2)视频只是动画一个路径并摆动一个标志.这可以通过使用AnimatedVectorDrawables(例如本博客显示)并通过动画路径进行自定义绘制(因此也支持前lolipop设备)来修剪路径开始/结束或再次实现,例如使用PathMeasure.getSegment()
连续地为路径设置动画.
正如azizbekians回答的那样,(3)动画是第一个提到的动画,只是动画(移动和缩放)视图.
关于第二个例子,我只想到了一个想法,那就是设置一个Path并相应地通过在animate()之后以某种方式传递它来移动View.(2)这可能吗?
沿路径移动视图显然是可能的,但随后视图将移动,您仍然需要找到一种方法来绘制跟随它的路径,如上所述.