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动画来做了。动画出完出蓝牙,嗯,先画个饼。

相关推荐
dancing9991 分钟前
Android Studio中Gradle 7.0上下项目配置及镜像修改
android·ide·android studio
EQ-雪梨蛋花汤1 小时前
【Part 2安卓原生360°VR播放器开发实战】第四节|安卓VR播放器性能优化与设备适配
android·性能优化·vr
每次的天空2 小时前
Android学习总结之kotlin篇(二)
android·学习·kotlin
刘洋浪子2 小时前
Android Studio中Gradle中Task列表显示不全解决方案
android·ide·android studio
橙子199110162 小时前
Kotlin 中 infix 关键字的原理和使用场景
android·开发语言·kotlin
后端码匠8 小时前
MySQL 8.0安装(压缩包方式)
android·mysql·adb
梓仁沐白9 小时前
Android清单文件
android
董可伦12 小时前
Dinky 安装部署并配置提交 Flink Yarn 任务
android·adb·flink
每次的天空12 小时前
Android学习总结之Glide自定义三级缓存(面试篇)
android·学习·glide
恋猫de小郭13 小时前
如何查看项目是否支持最新 Android 16K Page Size 一文汇总
android·开发语言·javascript·kotlin