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传统开发 vs Android Compose vs HarmonyOS ArkUI 对照表
android·华为·harmonyos
雨白1 小时前
Java 多线程指南:从基础用法到线程安全
android·java
00后程序员张2 小时前
详细解析苹果iOS应用上架到App Store的完整步骤与指南
android·ios·小程序·https·uni-app·iphone·webview
程序员江同学3 小时前
ovCompose + AI 开发跨三端的 Now in Kotlin App
android·kotlin·harmonyos
2501_915106324 小时前
Xcode 上传 ipa 全流程详解 App Store 上架流程、uni-app 生成 ipa 文件上传与审核指南
android·macos·ios·小程序·uni-app·iphone·xcode
消失的旧时光-19434 小时前
Kotlinx.serialization 使用讲解
android·数据结构·android jetpack
灿烂阳光g5 小时前
SELinux 策略文件编写
android·linux
.豆鲨包5 小时前
【Android】Viewpager2实现无限轮播图
android·java
xiangxiongfly9155 小时前
Android CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout实现折叠置顶效果
android·折叠