Android动画(一)——动画的介绍

前言

最近工作上有动画的需求,实现方案呢,又很难找,以前看了好几个动画相关的文章,感觉总是差点什么,总有种好像会了,但是又不怎么会的感觉,趁这次项目需求就看了三天的官网关于动画的介绍(还没看完),由于是在工作日看的,进度又赶,清明就加了三天班。

另外,Compose动画还没看,这里就不写了。

文档链接:developer.android.com/develop/ui/... ,我看的英文版,因为某次发现英文版新内容比中文版多,而且读起来会流畅一些。

第一节 动画的介绍(Introduction to animations)

文档这一节有五个小节,看起来是将动画分成了五种类别,但是有些动画在这节是没有的。这五个小节分别是:bitmaps动画、UI能见度与移动动画、基于物理的动画、layout改变动画和activity之间的动画

1. bitmaps动画(Animate bitmaps)

为了将类似icon或插图的bitmap图形动起来,需要使用drawable animation APIs。通常,这些animations被定义为静态的drawable资源,但你也可以在运行时定义这种动画行为,也就是代码中动态定义。这种动画效果如下图所示:

2. UI能见度与移动动画(Animate UI visibility and motion)

这节比较长,就长话短说了。第一个自然段忽略,第二个自然段介绍了属性动画,这里叫做property animation system,一个从Android3.0(API level 11)开始的玩意儿。

属性动画很多人都有介绍,能实现很多的动画功能,比如说view的显隐、缩放、移动、旋转,除了这四个,其他属性的改变动画也可以做,自定义的变量也行。属性,就是一个对象的字段。与属性动画关联的是view动画,这节并没有介绍。此节动画具体效果看下图:

第三自然段介绍的动画乍看起来不太明白,其实直接点进链接跳过去就知道了,内容很少,详见第六节。

3. 基于物理的动画(Physics-based motion)

截止到目前我看到的这块,只看到了两个有物理效果的动画API,分别是Spring animation和Fling animation,文档里也给了不带物理效果和带物理效果的区别,分别如下两图所示:

详细的就不介绍了,时间也不早了,就说两个点;

  1. 这节最后一个自然段提到了DynamicAnimation,不要以为有第三个基于物理的动画API(第三方或者自己实现那就有),这是个虚基类,点进去看就Spring animation和Fling animation两个子类。
  2. 这个文档里两个API介绍被打散到两节里面了。

4. layout改变动画(Animate layout changes)

在Android 4.4 (API level 19) 新增了一个叫做transition framework的东西。使用这个东西呢,需要指定开始和结束的layout,以及动画的类型,系统会自动计算和执行两个layout之间的动画。具体效果下图所示:

开始和结束的layout存储在各自的Scene中,虽然通常来说起始Scene由当前layout自动决定。你可以使用Transition来告诉系统想要什么类型的动画,然后调用TransitionManager.go()就会执行动画啦。

5. activity之间的动画(Animate between activities)

这个是在Android 5.0 (API level 21)新增的。这个动画也是基于transition framework的,和上一个点一样,不同的是,这个能实现activity之间的layout切换动画。

举例的应用场景就是不同activity之间跳转时的共享View动画。具体效果和上一个点图片中的动画一致。

通常来说,需要在startActivity跳转的时候携带一个由ActivityOptions转换来的bundle,而这个options通过 ActivityOptions.makeSceneTransitionAnimation()来获取,这个options会说明哪个view是共享的,然后transition framework就会在动画的时候将它们联系起来。

结尾

此节还有一些内容没有说,比如补间动画(tween animation)、ViewPropertyAnimator、ViewAnimationUtils(虽然这玩意儿就一个动画方法...);另外还有一些不常用的xml中的动画(对我而言),比如selector中指定动画、animated-selector;再之外还有就是Keyframe(第一次见到这玩意儿,属性动画的内容)。

转述个文档都分开两天来写,当初看这块是因为觉得MotionLayout或许对我项目有帮助,结果没时间看到MotionLayout,直接用view动画来做了。动画出完出蓝牙,嗯,先画个饼。

相关推荐
试行1 小时前
Android实现自定义下拉列表绑定数据
android·java
艾小逗1 小时前
uniapp快速入门教程,内容来源于官方文档,仅仅记录快速入门需要了解到的知识点
小程序·uni-app·app·es6
Dingdangr6 小时前
Android中的Intent的作用
android
技术无疆6 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
GEEKVIP6 小时前
Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
android·笔记·安全·macos·智能手机·电脑·笔记本电脑
Jouzzy13 小时前
【Android安全】Ubuntu 16.04安装GDB和GEF
android·ubuntu·gdb
极客先躯13 小时前
java和kotlin 可以同时运行吗
android·java·开发语言·kotlin·同时运行
Good_tea_h16 小时前
Android中的单例模式
android·单例模式
计算机源码社20 小时前
分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)
android·微信小程序·uni-app·毕业设计项目·毕业设计源码·计算机课程设计·计算机毕业设计开题
丶白泽21 小时前
重修设计模式-结构型-门面模式
android