Android动画进阶指北

news2024/11/23 16:37:34

原文链接 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.coloradmin.cn/o/910038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3、Spring_容器执行

容器执行点 1.整合 druid 连接池 添加依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version> </dependency>1.硬编码方式整合 新建德鲁伊配置 <?xml version"1.…

微信小程序 车牌号输入组件

概述 一个小组件&#xff0c;用于方便用户输入车牌号码 详细 概述 有时候我们开发过程中会遇到需要用户输入车牌号的情况&#xff0c;让客户通过自带键盘输入&#xff0c;体验不好且容易出错&#xff0c;例如车牌号是不能输入O和I的&#xff0c;因此需要有一个自定义的键盘…

FPGA中锁存器(latch)、触发器(flip-flop)以及寄存器(register)详解

文章目录 1 定义1.1 锁存器&#xff08;latch&#xff09;1.2 触发器&#xff08;flip-flop&#xff09;1.3 寄存器&#xff08;register&#xff09; 2 比较2.1 锁存器&#xff08;Latch&#xff09;危害即产生原因2.2 寄存器和锁存器的区别2.3 锁存器和触发器的区别 3 结构3.…

dvwa环境搭建

靶场搭建 环境作用apache网站代理&#xff0c;部署网站php一种开源通用脚本语言&#xff0c;用来处理程序mysql数据库&#xff0c;用来存储数据 1.打开sever 2008&#xff0c;远程桌面连接&#xff0c;将文件拷贝到虚拟机&#xff0c;打开微软常用集合运行库&#xff0c;等待…

「Vue|网页开发|前端开发」01 快速入门:用vue-cli快速写一个Vue的HelloWorld项目

本文主要介绍如何用vue开发的标准化工具vue-cli快速搭建一个符合实际业务项目结构的hello world网页项目并理解vue的代码文件结构以及页面渲染流程。 文章目录 一、准备工作&#xff1a;安装node.js二、项目搭建创建项目目录全局安装vue-cli使用Webpack初始化项目启动项目学会…

RedisDesktopManager 连接redis

redis查看是否启动成功 ps -ef | grep redis以上未启动成功 cd /usr/local/bin/ 切换根目录 sudo -i 开启服务端 ./redis-server /usr/local/redis/redis.conf 开启客户端 ./redis-cli

Ganache 本地测试网远程连接

文章目录 前言1. 安装Ganache2. 安装cpolar3. 创建公网地址4. 公网访问连接5. 固定公网地址 前言 Ganache 是DApp的测试网络&#xff0c;提供图形化界面&#xff0c;log日志等&#xff1b;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpol…

MySQL如何进行表之间的关联更新

在实际编程工作或运维实践中&#xff0c;对MySQL数据库表进行关联更新是一种比较常见的应用场景&#xff0c;比如在电商系统中&#xff0c;订单表里保存了商品名称的信息&#xff08;冗余字段设计&#xff09;&#xff0c;但如果商品名称发生变化&#xff0c;则需要通过关联商品…

[已解决]SpringBoot 返回日期时间格式不正确

最近开发中不知道为什么&#xff0c;返回给前端的日期时间格式变成了这样子&#xff0c;晚了8小时&#xff0c;在网上找了解决办法&#xff1a; 原返回值&#xff1a; 需要修改的地方&#xff1a; 在application.yml中添加下面的代码&#xff0c;重启springboot项目即可。 sp…

C++信息学奥赛1121:计算矩阵边缘元素之和

题解&#xff1a;i0 or j0 or in-1 or jm-1 or in-1 or jm-1 代码&#xff1a; #include<iostream> // 包含输入输出流库 #include<cmath> // 包含数学函数库 using namespace std; // 使用标准命名空间int main() {int n,m;cin>>n>>m; // 输入…

2023年夏季《移动软件开发》实验报告一

姓名和学号&#xff1f;本实验属于哪门课程&#xff1f;中国海洋大学22夏《移动软件开发》实验名称&#xff1f;实验1&#xff1a;第一个微信小程序博客地址&#xff1f;XXXXXXXGithub仓库地址&#xff1f;https://github.com/enfantsRichesDeprimes/Mobile-Software-Developme…

vue2+element-ui+springboot编写一个简单的CRUD和上传页面

1.0先看效果图 2.0主功能页面展示 3.0新增功能 4.0更新功能 5.0接口错误提示 前端码云链接:https://gitee.com/xiaojianr/management/tree/master/ 前端拷贝完成需要使用:npm install 命令完成package.json依赖的下载 后端码云链接:https://gitee.com/xiaojianr/manage

21款奔驰E300 L升级ACC自适应巡航系统,解放双脚缓解驾驶疲劳

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f;如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全和…

Ubuntu20.04安装SNMP服务

在线安装snmp 1.安装snmp服务 sudo apt-get install updatesudo apt-get install snmp snmpd snmp-mibs-downloader2.重启SNMP服务 sudo /etc/init.d/snmpd restart3.查看snmp配置 sudo grep -Ev ^$|^# /etc/snmp/snmpd.conf 离线安装SNMP &#xff08;重要&#xff09; 我…

量子非凡去广告接口

量子非凡去广告接口&#xff0c;免费发布&#xff0c;请各位正常调用&#xff0c;别恶意攻击 >>>https://videos.centos.chat/weisuan.php/?url

二、2.打印和内联汇编

调用约定&#xff0c; calling conventions&#xff0c;从字面上理解&#xff0c;它是调用函数时的一套约定&#xff0c;是被调用代码的接口&#xff0c;它体现在 参数的传递方式&#xff0c;是放在寄存器中&#xff1f;栈中&#xff1f;还是两者混合&#xff1f; 参数的传递顺…

Docker 的数据管理与镜像

Docker 的数据管理与镜像 一、Docker 的数据管理1.数据卷2.数据卷容器3.端口映射4.容器互联&#xff08;使用centos镜像&#xff09; 二、Docker 镜像的创建1.基于现有镜像创建2.基于本地模板创建3.基于Dockerfile 创建 三、Dockerfile 操作常用的指令&#xff1a;1.FROM 镜像2…

RTSP/Onvif流媒体服务器EasyNVR安防视频平台一直提示网络请求失败的问题解决方案

EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议&#xff0c;将前端接入设备的音视频资源进行采集&#xff0c;并转码成适合全平台、全终端分发的视频流格式&#xff0c;包括RTMP、RTSP、FLV、HLS、WebRTC等格式。 有用户反馈&#xff0c;EasyNVR使用过程中&#xff0c;突然提…

飞书小程序开发

1.tt.showModal后跳转页面 跳转路径要为绝对路径&#xff0c;相对路径跳转无响应。 2.手机息屏后将不再进入onload()生命周期&#xff0c;直接进入onshow()生命周期。 onLoad()在页面初始化的时候触发&#xff0c;一个页面只调用一次。 onShow()在切入前台时就会触发&#x…

代码随想录算法训练营day41 | 343. 整数拆分,96. 不同的二叉搜索树

目录 343. 整数拆分 96. 不同的二叉搜索树 343. 整数拆分 类型&#xff1a;动态规划 难度&#xff1a;medium 思路&#xff1a; dp[i]所用的拆分方法至少已经拆分了两次&#xff0c;比如dp[2]1&#xff0c;小于2&#xff0c;在大于2的数中&#xff0c;最后的2是不会拆的。 …