Android - 动画

news2025/4/20 23:04:38

一、概念

补间动画 ViewAnimation(Tween):不改变view的位置和属性。
属性动画PeopertyAnimation:view的属性根据执行的动画发生真实的改变。
帧动画 DrawableAnimation(Frame):

二、补间动画 ViewAnimation(Tween)

2.1 动画模式

透明度

AlphaAnimation(float fromAlpha, float toAlpha)

fromAlpha:起始透明度。

toAlpha:结束透明度,透明度的范围为0-1。

缩放

ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

fromXScale/fromYScale:沿着X轴/Y轴缩放的起始比例。

toXScale/toYScale:沿着X轴/Y轴缩放的结束比例。

pivotX/pivotY:缩放的中轴点X/Y坐标,即距离自身左边缘的位置,比如50%就是以图像的中心为中轴点。

移动

TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)

fromXDelta/fromYDelta:动画起始位置的X/Y坐标。

toXDelta/toYDelta:动画结束位置的X/Y坐标。

旋转

RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

fromDegrees/toDegrees:旋转的起始/结束角度。

动画集合

AnimationSet(boolean shareInterpolator)

可同时播放以上动画。shareInterpolator:true都用一样的插值器,false用各自的插值器。通过调用addAnimation(Animation a) 将动画添加进集合。

2.2 动画配置

持续时间public void setDuration(long durationMillis)
重复次数

public void setRepeatCount(int repeatCount) 

值为-1或者infinite时,表示动画永不停止。

重复模式

public void setRepeatMode(int repeatMode)

默认restart,但只有当repeatCount大于0或者infinite或-1时 才有效。还可以设置成reverse,表示偶数次显示动画时会做方向相反的运动。

停留结果

public void setFillAfter(boolean fillAfter)

设为 true 则动画结束后 view 会停留在当前效果。

开始动画

public void startAnimation(Animation animation)

传入要播放的动画。

 2.3 插值器 Interpolator

LinearInterpolator动画以均匀的速度改变。
AccelerateInterpolator在动画开始的地方改变速度较慢,然后开始加速。
AccelerateDecelerateInterpolator在动画开始、结束的地方改变速度较慢,中间时加速。
CycleInterpolator动画循环播放特定次数,变化速度按正弦曲线改变: Math.sin(2 * mCycles * Math.PI * input)。
DecelerateInterpolator在动画开始的地方改变速度较快,然后开始减速。
AnticipateInterpolator反向,先向相反方向改变一段再加速播放,
AnticipateOvershootInterpolator开始的时候向后然后向前甩一定值后返回最后的值。
BounceInterpolator跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100。
OvershottInterpolator回弹,最后超出目的值然后缓慢改变到目的值。

2.4 调用方式

2.4.1 xml

res目录下新建anim文件夹,创建xml文件,可选节点有alpha、rotate、scale、translate、set。

<translate xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
    android:fromXDelta="0"  
    android:toXDelta="320"  
    android:fromYDelta="0"  
    android:toYDelta="0"  
    android:duration="2000"/>
AnimationUtils.loadAnimation(this, R.anim.translate)    //加载Xml文件中的动画
imagineView.startAnimation(translate)    //将动画设置到指定的View上

2.4.2 代码

val imagineView = binding.imagineView
val button = binding.button
//透明
val alphaAnimation = AlphaAnimation(1.0F, 0.2F)
//旋转
val rotateAnimation = RotateAnimation(0F, 360F, Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F)
//缩放
val scaleAnimation = ScaleAnimation(1.0F, 5.0F, 1.0F, 5.0F, Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F)
//平移
val translateAnimation = TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0F, Animation.RELATIVE_TO_PARENT, 0F,Animation.RELATIVE_TO_PARENT, 0F, Animation.RELATIVE_TO_PARENT, 0.4F)
//动画集合
val set = AnimationSet(true).apply {
    addAnimation(alphaAnimation)
    addAnimation(rotateAnimation)
    addAnimation(scaleAnimation)
    addAnimation(translateAnimation)
    duration = 1     //持续时间
    repeatCount = 10    //重复次数
    repeatMode = Animation.RESTART  //重复方式
    fillAfter
}
button.setOnClickListener {
    imagineView.startAnimation(set) //开始动画
}

三、属性动画PeopertyAnimation

3.1 ViewPropertyAnimator

view.animate().translationX(500)

 

3.2 ObjectAnimator

四、切换界面动画 Transition

五、帧动画 DrawableAnimation(Frame)

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

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

相关文章

SPSS如何进行使用时间序列模型之案例实训?

文章目录 0.引言1.时间序列数据平稳处理2.指数平滑法建模3.ARIMA建模4.季节性分解 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对…

MYSQL用户组管理

1&#xff1a;使用明文密码创建用户 使用密文密码创建用户 1.2 查看用户信息 1.3 重命名用户 rename 1.4 删除用户信息 drop 1.5 修改当前登录用户的密码 set password password(123456); 1.6 修改其他用户的密码 set password for nancylocalhost password(abc123); 1.7…

2023年常见的20道JavaScript面试题及其答案解析,你知道多少

JavaScript中typeof操作符有哪些返回值&#xff1f; 答案&#xff1a;typeof操作符返回字符串数据类型。可能的返回值有&#xff1a;“undefined”、“boolean”、“number”、“string”、“object"和"function”。如何检查一个变量是否为数组&#xff1f; 答案&…

【JavaEE】Thread类

目录 前言 1、创建一个线程 1.1、 体会多线程的执行 1.2、体会单线程的执行 1.3、sleep方法&#xff08;休眠&#xff09; 1.4、通过第三方程序来观察线程详情 1.5、创建线程的方式 1.5.1、继承Thread类&#xff0c;重写run方法来创建线程 1.5.2、实现Runnable接口&am…

linux 查看系统版本

文章目录 一、查看Linux内核版本的命令二、查看Linux系统发行版本的命令三、 延伸&#xff1a; 一、查看Linux内核版本的命令 cat /proc/version 此命令可以查看正在运行的内核版本信息。/proc 目录存储的是当前内核运行状态的一系列特殊文件&#xff0c;包括&#xff1a;内存…

electron源码保护

electron 程序发布后&#xff0c;如果未对程序做保护&#xff0c;则极容易受到破坏&#xff0c;比如被轻松破解密码&#xff0c;或者被修改程序&#xff0c;所以必须对程序做一些安全防护。虽然没有100%的安全防护&#xff0c;但是提升破解难度&#xff0c;直至破解代价超出了范…

UML图中的domain model,object model,system sequence diagram以及interaction diagram

UML图&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;是一种用于描述、可视化、构建和记录软件系统的标准化建模语言。在UML中&#xff0c;有很多类型的图&#xff0c;其中包括领域模型&#xff08;Domain Model&#xff09;、对象模型&#xff08…

拥抱智能时代:初探RFID系统

在数字化时代&#xff0c;人们越来越追求高效率和高质量的体验&#xff0c;以获得更快乐、更好的生活。RFID系统作为一项智能化管理技术&#xff0c;正越来越广泛地应用于各个领域&#xff0c;以提高效率和质量。本文将介绍RFID系统的基本概念、工作原理和实际应用案例&#xf…

OpenAI的编程语言和框架,给程序员带来了帮助有哪些

OpenAI 是一个人工智能开发公司&#xff0c;成立于2015年&#xff0c;总部位于美国旧金山。这家公司致力于研究和开发先进的人工智能技术&#xff0c;旨在将这些技术应用到解决全球一些最棘手的问题上。 OpenAI 以其卓越的技术和实验室出品的 groundbreaking AI papers 而闻名…

Android焦点流程梳理

作者&#xff1a;Cy13er 前言 最近在看一些焦点处理的问题&#xff0c;认真处理起来发现不跟着源码自己走一遍焦点相关的流程&#xff0c;对于问题的分析上会比较困难。所以本文主要对焦点流程进行一次梳理&#xff0c;在处理类似问题时也可以作为手册阅读。 起源 一切都要从…

Apache Kafka 进阶(一)

官网 Apache Kafka是一个开源的分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。 核心能力 高吞吐量 在网络有限的吞吐量下&#xff0c;使用延迟低至2ms的机器集群交付消息。可扩展性 将生产集群扩展到1000个代理&#xff0c…

SQLite安装配置

1.什么是 SQLite&#xff1f; SQLite是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎&#xff0c;这是在普及方面的增长&#xff0c;与它的尺寸大小无关。SQLite源代码不受版权限制。 SQLite是…

Linux 五种网络IO模式(阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO)

Linux网络编程中&#xff0c;有五种网络IO模式&#xff0c;分别是阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO&#xff1b; 虽然说不能全都认识得很透彻&#xff0c;但至少得都知道一点&#xff01; 开始之前&#xff0c;先了解以下同步IO和异步IO&#xff1b; 1. 同步…

探索AIGC创新实践,亚马逊云科技与全球咨询合作伙伴携手同行

AIGC(AI Generated Content&#xff0c;人工智能生成内容)&#xff0c;已经成为全球出圈的科技热点。各行各业都在重新审视和思考AIGC的创新价值、未来趋势和成功实践&#xff0c;力争在这波热潮下寻找更多创新的可能性&#xff0c;重塑行业格局。 在AIGC领域&#xff0c;亚马…

无代码资讯|ChatGPT新功能曝光;Mendix与亚马逊云科技底层融合;无代码开发平台Appy Pie推出内置AI

栏目导读&#xff1a;无代码资讯栏目从全球视角出发&#xff0c;带您了解无代码相关最新资讯。 Top3大事件 1、ChatGPT 新功能曝光&#xff0c;GPT-4 迎来 AGI 历史性时刻&#xff01; 北美时间4月20日&#xff0c;Open AI联合创始人Greg Brockman受邀出席 “2023TED” 大会&…

手写【深拷贝】

JS中深拷贝的实现 JSON.parse(JSON.stringify())递归实现深拷贝 使用JSON.parse(JSON.stringify()) 实现 无法拷贝 函数、正则、时间格式、原型上的属性和方法等 递归实现深拷贝 es5实现深拷贝 源对象 const obj {name: 张桑,age: 18,hobby: [{name: 篮球,year: 5,loveSta…

极简爬虫通用模板

网络爬虫的一般步骤如下&#xff1a; 1、确定爬取目标&#xff1a;确定需要爬取的数据类型和来源网站。 2、制定爬取策略&#xff1a;确定爬取哪些网页、如何爬取和频率等。 3、构建爬虫程序&#xff1a;使用编程语言&#xff08;如Python&#xff09;实现爬虫程序&#xff…

【python】列表、字典、元组与集合的特点以及对比

一、列表&#xff08;List&#xff09; 1. 列表的特点 数据按顺序存储列表有正序、倒序两种索引列表可存储任意类型的数据&#xff0c;并且允许重复。 2. 列表的遍历&#xff1a; lst[1,2,3] for i in range(len(lst)):print(lst[i],end" ")3. 列表的缺点&#x…

虹科方案 | HK-TrueNAS:音频协作的理想存储

一、虹科HK-TRUENAS 非常适合 AVID PRO TOOLS™ 专业音频编辑和大多数媒体和娱乐 (M&E) 工作流程从录制开始&#xff0c;经过后期制作&#xff0c;最后进入播放。这一过程可能需要几个月的时间来拍摄一部大型的电影&#xff0c;也可能需要几个小时甚至几分钟的时间来播放最…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、工程交易等业务的企业

招投标管理系统-适合于招标代理、政府采购、企业采购、工程交易等业务的企业 招投标管理系统是一个用于内部业务项目管理的应用平台。以项目为主线&#xff0c;从项目立项&#xff0c;资格预审&#xff0c;标书编制审核&#xff0c;招标公告&#xff0c;项目开标&#xff0c;项…