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

相关推荐
雨白16 小时前
Android 快捷方式实战指南:静态、动态与固定快捷方式详解
android
hqk16 小时前
鸿蒙项目实战:手把手带你实现 WanAndroid 布局与交互
android·前端·harmonyos
LING16 小时前
RN容器启动优化实践
android·react native
恋猫de小郭19 小时前
Flutter 发布官方 Skills ,Flutter 在 AI 领域再添一助力
android·前端·flutter
Kapaseker1 天前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴1 天前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭1 天前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab1 天前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe2 天前
Now in Android 架构模式全面分析
android·android jetpack
二流小码农2 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos