Android动画进阶指北

2023-10-31

原文链接 Android Animation Advanced Tricks

前面的文章介绍了动画的基本使用方法,本文来聊一聊涉及到动画的高级技巧,以及一些非常优质的学习资源和动画三方库和框架。

页面之间的过渡动画

常规的动画都是针对某一页面上的某个元素做动画,这个相对简单,之前的文章讲了很多。但有时候页面与页面之间也是需要过渡动画的,这个可以加强切换的视觉体验,但最好要注意整个应用内的风格统一,不能A到B是一种切换样式,B到C却是另外一种。

主要有两类,一是Activity之间的切换,二是布局之间的切换。

Activity之间的切换动画

因为Activity的创建与启动以及它的Window的创建和显示都是由Frameworks来控制的,甚至于Activity里面的布局何时加载也是由系统决定的,所以对于Activity之间的切换严重依赖于Frameworks,而不同版本的安卓,支持的情况还不一样。

传统的做法

这个是针对 于所有安卓 版本都可以使用的方法,也是最简单的方式,就是使用Activity#overridePendingTransition方法。

这个方法并不难,具体如何使用可以参考其文档,以及这篇文章,讲的都比较清楚。

使用Transition

在Android 4.4时,系统中加入了一个叫做Transition的东西,专门用于页面之间的切换的,但也仅是限于同一个窗口(也即同一个Activity内)的ViewGroup。在Android 5.0时又把Activity之间的切换提供了支持,对于5.0以上的版本可以使用这个框架来实现切换,会比传统的做法都要专业一些。

具体可以参看官方教程,以及这篇教程这篇文章,讲解的都相当好。

布局之间的过渡切换

这里的布局就是指除Activity以外的,比如从一个ViewGroup切换到另外一个ViewGroup。其实Fragment本质上就是一个ViewGroup,所以也包含在内。

在Android 4.4 (Kikat API 19),加入了Transition frameworks,专门用于解决场景切换,主要是通过Scene对象和Transition对象。Transition对象定义具体针对 哪个ViewGroup做什么样的动画,而Scene对象定义了ViewGroup的某一种状态,如渐变进入,那么渐变前是一个Scene,完全可见后又是一个Scene,而渐变的过程则叫Transition。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tI5nwFlJ-1692617535043)(https://developer.android.com/images/transitions/transitions_diagram.png)]

可以参看官方文档,以详细了解如何使用transition。

复杂动画的实现逻辑

动画是一个非常复杂且精深的领域,千万不要说做个UI很容易,或者说写个动画很容易,要想做好动画需要很深的功底,不但需要对动画框架有深入的了解,也要对整个视觉GUI有深入的理解,并且需要良好的数学与物理知识。

复杂的动画的复杂度体现在两个方面,一个是整体上看起来复杂,也就是是很多不同的动画的组合;另外一个是具体的某个属性复杂,如复杂的路径,复杂的时间变化或者复杂的形变。分开说。

看起来复杂的动画

这一般是涉及众多的动画的组合,整体表现上看起来特别复杂。就比如说电商可能会有一个购物筐,里面往外飞各种商品的动画。对于这种就是要把它拆解,拆解开来后,其实并不复杂。

  • 购物车:可以是渐变,不断的从透明变到不透明。或者干脆不做动画
  • 商品:预定义一组商品,每次随机选择一个,再选择随机的位置,然后从底下往上飞(或者从上往下飞),再设置一个随机的速度,也可以加上旋转

这样拆解开来就不复杂了。

复杂的变幻

这里就要涉及一些数学 和物理知识了,比如用一些特别的曲线,特殊的曲面,特殊的形变等。

优秀的动画的设计范例

这里就不得不得提到大名顶顶的Dribbble了,这里有相当优秀的设计资源,其中也有很多动画设计,可以尝试着去实现一下,都很有挑战。

优秀的动画相关资源

还有一些资源,特别是开源的库,也非常值得学习和研究和使用。

MotionLayout

这个并不是三方的,而是官方AndroidX中的,相当的强大,当然使用起来也略复杂。具体使用方法可以参考 官方教程这篇文章

The Top 27 Android Animation Open Source Projects

这里是一个集合,里面列出一些优秀的动画相关的开源库,都相当的棒。

Android View Animations

有一些针对View的非常炫酷的特效,如抖动,缩放和旋转等。它是受一个水果上面的动画库的激发。

Material-Animations

主要是介绍如何使用Transition frameworks的。

Lottie

可以把设计软件Adobe After Effects直接转成动画。

一些插值器

可看这个这个

专门用于加载动画

里面有各种神奇的加载特效,非常棒。是一个前端CSS加载特效的Android上的实现。

教程的示例

这是一个教程集锦,里面也包含各种示例,是一个相当不错的学习资源。

另外一个教程和示例

与上面的类似,也是一个集教程与实例在一起的项目。

Android Animation Detailed Tutorials

一个项目的合集。

原创不易,打赏点赞在看收藏分享 总要有一个吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android动画进阶指北 的相关文章

随机推荐

  • 微信小程序地理位置API使用流程

    地理位置接口使用具体流程 开发者如需在最新版本发布后使用地理位置相关接口 除需完成接口权限开通外 还需在 app json 或ext json 配置环节 具体如下 以wx chooseLocation为例 1 接口权限开通 以下 8 个接口
  • 从mysql数据库中读取二进制文件_MySQL-主从复制:基于二进制文件复制详解

    前言 主从复制是指把一个MySQL的数据库服务器作为主服务器 master 然后把master的数据复制到一个或者多个MySQL数据库服务器作为从服务器 slave 从master到slave的复制一般是异步复制 所以从服务器的复制可以随时
  • 在idea中如何导入JDBC驱动

    1 左上角点击File 选中project Structure 2 找到modules Dependencies 号 JARS 3 选择文件夹找到驱动并导入应用保存即可
  • c/c++数组的用法

    三键三连 三键三连 三键三连 编程找到一个数组中的最大元素和最小元素 输入输出 输入 n n lt 100 n个元素的值 输出 最大元素 最小元素 include
  • 字符串分割函数--strtok与strsep

    在 c 中 字符串分割函数主要有两种 一是strtok函数 另一个就是strsep函数 下面我们对这两个函数作一个详细解释说明 1 strtok 原形 char strtok char str const char delim 功能 分解字
  • npm install 安装软件,出现 operation not permitted, mkdir

    解决办法 在开始菜单栏里打开cmd的时 右击选择 以管理员身份运行 然后再在打开的cmd里运动install就没问题了
  • Active Directory(活动目录) 域服务

    域环境 域环境是一种虚拟的环境 不受物理环境的限制 将计算机逻辑的组织到一起的集中管理 工作组 网络资源少 分散管理 适合小型网络 Windows域 适合大型网络 活动目录 活动目录是Windows的一种服务 是一个目录数据库 集中存储着整
  • 【小程序】input输入双向数据绑定

    小程序中 input标签中的数据为单向绑定
  • 7.27 Qt

    制作简易小闹钟 Timer pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define ma
  • ubuntu 配置nfs 出现Failed to start nfs.service: Unit nfs.service not found

    ubuntu 10 0开启配置nfs 服务service nfs start时出现 Failed to start nfs service Unit nfs service not found 原因是ubuntu 10 0以上的版本取消了s
  • Pycharm--flake8的配置使用

    前言 Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具 Flake8检查规则灵活 支持集成额外插件 扩展性强 一 安装flake8 进入虚拟环境 pip install flake8 二 在pycharm中
  • 安装imageio

    在python下安装imageio cmd中输入如下 pip install imageio
  • EWM100学习笔记(一)

    Unit 1 EWM与WM模块的差异 英文不太好 大概翻译了一部分内容 第一张大概介绍了一下WM与EWM各自的作用 最后总结了一下EWM相比WM的优势 SAP的常规操作 S 4后干脆就直接没有了WM模块 直接推EWM WM主要的功能 Tra
  • CSS-颜色属性+颜色函数+自定义变量

    最近更新时间 2017年5月8日16 08 13 我的博客地图 离开校园踏入职场 不是到达人生巅峰 而是人生才刚刚开始 校园里学的知识远不足工作需求 而且校园里的学习深度也比较浅显 因此 对于刚毕业前三年的工程师来说 马不停蹄不分昼夜的学习
  • 睿智的目标检测41——Pytorch搭建Retinanet目标检测平台

    睿智的目标检测41 Keras搭建Retinanet目标检测平台 学习前言 什么是Retinanet目标检测算法 源码下载 Retinanet实现思路 一 预测部分 1 主干网络介绍 2 从特征获取预测结果 3 预测结果的解码 4 在原图上
  • 思维模式

    1 整体思维 整体宏观的思考 2 反向思维 不断的问自己如果不这样 3 方法思维 不断的寻找方法 不断的提高自己 从知识范围 方法等宏观角度 还有特有技术方向
  • 字符输入流

    字符输入流 Character Input Stream 是用于从输入源 如文件 网络连接等 读取字符数据的流对象 在 Java 中 主要使用 java io Reader 及其子类来实现字符输入流的操作 FileReader 是 Java
  • uniapp 页面跳转的坑

    uniapp 页面跳转的坑 我们在使用 uniapp 的时候 经常使用到页面跳转 uniapp 的几个常用跳转我就不一一列表了 我就说我遇到的坑吧 如下图 我要从第一个页面跳到第二个页面 我在组件里面写的跳转 大家移位到下一张图 如下图 这
  • LaTex 使用特殊章节符号 (§)

    参考 LaTex 使用特殊章节符号 LaTex 使用特殊章节符号 在 tex文件开头 加上以下内容 usepackage utf8 inputenc usepackage cleveref crefname section Crefname
  • Android动画进阶指北

    原文链接 Android Animation Advanced Tricks 前面的文章介绍了动画的基本使用方法 本文来聊一聊涉及到动画的高级技巧 以及一些非常优质的学习资源和动画三方库和框架 页面之间的过渡动画 常规的动画都是针对某一页面