Android动画进阶指北

原文链接 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

一个项目的合集。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/99535.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS系统环境搭建(十四)——CentOS7.9安装elasticsearch-head

centos系统环境搭建专栏🔗点击跳转 关于node的安装请看上一篇CentOS系统环境搭建(十三)——CentOS7安装nvm,🔗点击跳转。 CentOS7.9安装elasticsearch-head 文章目录 CentOS7.9安装elasticsearch-head1.下载2.解压3.修…

Vue3.X 掌握基础知识(二)

接着上一篇 Vue3.X 创建简单项目&#xff08;一&#xff09;&#xff0c;我们接着往下了解Vue的一些简单的功能。 一、HomeView.vue的改写复习 这里我们介绍数据的绑定、判断、for循环等功能。 <template><h1>hello world</h1><p v-text"data.na…

计算机网络基础

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

C# 设置、获取程序,产品版本号

右键&#xff0c;程序属性。打开“程序集信息” 选择需要设置的版本信息。下面的代码&#xff0c;获取不同的设置内容。 string 其他 Assembly.GetExecutingAssembly().FullName; string 程序集版本 Assembly.GetExecutingAssembly().G…

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification (Paper reading) Renrui Zhang&#xff0c;Shanghai AI Laboratory&#xff0c;ECCV2022&#xff0c;Cited:45&#xff0c;Code&#xff0c;Paper 1. 前言 对比式视觉-语言预训练&#xff0c;也称…

javaScript:对函数的认识与应用

目录 一.前言 二.函数介绍 A.函数的分类 1.自定义函数 示例 2.匿名函数 声明匿名函数 计时器也是匿名函数 3.立即执行函数 解释 示例 B.函数的返回值 没有参数&#xff0c;没有返回值的函数 示例 没有参数&#xff0c;有返回值的函数 示例 有参数&#xff0c;有…

【Leetcode】108. 将有序数组转换为二叉搜索树

一、题目 1、题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例1: 输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-1…

java学习——二叉树

二叉树的种类&#xff1a; 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 完全二叉树&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层…

spring源码分析bean的生命周期(下)

doGetBean()执行过程 createBean()执行过程 一、DependsOn注解 spring创建对象之前会判断类上是否加了DependsOn注解&#xff0c;加了会遍历然后会添加到一个map中&#xff0c;spring会先创建DependsOn注解指定的类 二、spring类加载器 在合并BeanDefinition&#xff0c;确定…

时序数据库influxdb笔记

官方资料 https://docs.influxdata.com/influxdb/v2.7/install/?tLinux https://www.influxdata.com/influxdb/ 安装 1、linux平台下 1&#xff09;下载 2&#xff09;解压 3&#xff09;添加账户&#xff08; adduser influx&#xff09; 4&#xff09;设置目录权限 5…

操作符详解(1)

1. 操作符分类&#xff1a; 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 1. 除了 % 操作符之外&#xff0c;其他的几个操作符可以作用于整数和浮点数。 2. 对…

技术文档如何在线搭建网页形式,方便编辑与管理分享其他人员?

搭建在线技术文档网页形式的平台可以方便编辑、管理和分享给其他人员&#xff0c;促进团队的协作和知识共享。 搭建在线技术文档网页形式的步骤和具体操作的详细介绍&#xff1a; 1. 选择适合的平台 首先&#xff0c;需要选择适合搭建在线技术文档网页形式的平台。市面上有很…

深入完整的带你了解java对象的比较

目录 元素的比较 1.基本类型的比较 2.对象比较的问题 1.运行结果 2.疑问 3.原因 对象的比较 1.覆写基类的equals 2.基于Comparble接口类的比较 3.基于比较器比较 4.三种方式对比 元素的比较 1.基本类型的比较 在Java 中&#xff0c;基本类型的对象可以直接比较大…

dockerfile的概念

目录 一.Dockerfile 概念 1.1 docker镜像的分层 二.Docker镜像的创建 2.1基于已有的镜像创建 2.2基于本地模板创建 2.3基于dockerfile创建 2.3.1dockerfile 结构(四部分) 三.Dockerfile操作指令 3.1ENTRYPOINT指令 3.2CMD 与entrypoint 四.ADD和copy区别 五.镜像分层的原…

Docker运行Nacos容器,过一会就报错`UnsatisfiedDependencyException`

Docker运行Nacos容器&#xff0c;过一会就报错UnsatisfiedDependencyException 问题背景&#xff1a; 最近要上线一个项目&#xff0c;由于要使用Nacos作为服务注册中心&#xff0c;为了方便&#xff0c;我就打算直接使用Docker部署Nacos&#xff0c;没想到Nacos启动没一会就嗝…

spring cloud 之 dubbo nacos整合

整体思路&#xff1a; 搭建本地nacos服务&#xff0c;详见docker安装nacos_xgjj68163的博客-CSDN博客 共三个工程&#xff0c;生产者服务、消费者服务、生产者和消费者共同依赖的接口工程&#xff08;打成jar&#xff0c;供生产者和消费者依赖&#xff09;&#xff1b; …

javaScript:常用的js字符串方法

目录 一.前言 二.字符串方法 1.charAt(num) 获取字符串指定位置上的字符 解释 示例 注意 2.length属性 获取字符串长度 解释 示例讲解 3.substring()字符串的截取 解释 特点 示例 4.slice()字符串截取 解释 特点 示例 应用 单行文本加省略号 字符串劫…

7-5 螺旋方阵

分数 20 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 所谓“螺旋方阵”&#xff0c;是指对任意给定的N&#xff0c;将1到NN的数字从左上角第1个格子开始&#xff0c;按顺时针螺旋方向顺序填入NN的方阵里。本题要求构造这样的螺旋方阵。 输入格式&#xff1a; 输入在…

STM32 CubeMX (第一步Freertos任务管理:创建、删除、挂起、恢复)

STM32 CubeMX Freertos STM32 CubeMX &#xff08;Freertos任务&#xff1a;创建、删除、挂起、恢复&#xff09; STM32 CubeMX Freertos前言一、STM32 CubeMX 配置时钟树配置HAL时基选择TIM1&#xff08;不要选择滴答定时器&#xff1b;滴答定时器留给OS系统做时基&#xff09…

css学习1

1、样式定义如何显示元素。 2、样式通常保存至外部的css文件中。 3、样式可以使内容与表现分离。 4、css主要有两部分组成&#xff1a;选择器与一条或多条声明。 选择器通常为要改变的html元素&#xff0c;每条声明由一个属性和一个值组成。每个属性有一个值&#xff0c;属性…