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.hqwc.cn/news/76654.html

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

相关文章

CSS中的calc()函数有什么作用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中的calc()函数及其作用⭐ 作用⭐ 示例1. 动态计算宽度:2. 响应式布局:3. 自适应字体大小:4. 计算间距: ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点…

算法基础(1):排序和查找算法

1、排序算法 1.1、堆排序(大顶堆)-重点: 参考文章:堆排序1、堆排序二 前置知识: 大顶堆:完全二叉树,且父节点大于左右儿子,左右子树又是大顶堆,依赖数组来实现(vector)第一个节点的父节点&…

rust入门系列之Rust介绍及开发环境搭建

Rust教程 Rust基本介绍 网站: https://www.rust-lang.org/ rust是什么 开发rust语言的初衷是: 在软件发展速度跟不上硬件发展速度,无法在语言层面充分的利用硬件多核cpu不断提升的性能和 在系统界别软件开发上,C出生比较早,内…

leetcode 123. 买卖股票的最佳时机 III

2023.8.21 本题限制了买卖次数:最多买卖两次。 与之前的股票问题相比,dp数组的第二个维度需要设置四个状态: 第一次持有股票第一次不持有股票第二次持有股票第二次不持有股票 ps:持有股票不等于购买股票!&#xff01…

ChatGPT-4: 半年的深度使用思考

几个月的时间一直在使用 ChatGpt-4,以口述语音转文字的形式说一下自己的体会。 1、选择版本 大前提:我使用的都是 GPT4 的版本。也就是说至少每个月要付费20$。 因为 3.5 的版本,实际上使用体验是非常差的,主要体现在答非所问上。…

离谱的Bug

离谱的 Bug Bug 情况发现 Bug修改 Bug其他感受历史 Bug火星Spirit号Mars Global Surveyor任务 Bug 情况 有一次,我在开发一个网页应用程序时,遇到了一个令人目瞪口呆的Bug。这个Bug出现在一个特定的页面上,当用户点击某个按钮时,…

python知识:什么是字符编码?

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 我们的MySQL使用latin1的默认字符集, 也就是说,对汉字字段直接使用GBK内码的编码进行存储, 当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时…

微信开发之一键获取好友详情的技术实现

简要描述: 获取联系人信息 请求URL: http://域名地址/getContact 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说…

实战:工作中对并发问题的处理 | 京东物流技术团队

1. 问题背景 问题发生在快递分拣的流程中,我尽可能将业务背景简化,让大家只关注并发问题本身。 分拣业务针对每个快递包裹都会生成一个任务,我们称它为 task。task 中有两个字段需要关注,一个是分拣中发生的异常(exp…

【Apollo】自动驾驶感知——毫米波雷达

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

React2023电商项目实战 - 1.项目搭建

古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。 —— 陆游《《冬夜读书示子聿》》 系列文章目录 项目搭建App登录及网关App文章自媒体平台(博主后台)内容审核(自动) 文章目录 系列文章目录一、项目介绍1.页面…

ListNode相关

目录 2. 链表相关题目 2.1 合并两个有序链表(简单):递归 2.2 删除排序链表中的重复元素(简单):一次遍历 2.3 两链表相加(中等):递归 2.4 删除链表倒数第N个节点&…