【学习】Android动画解析——类型、使用场景与解析

【小程序动画合集】10种小程序动画效果实现方法,文章太长建议收藏! 前言 一提小程序与动画,首先想到的是什么?嗯,微信小程序独创了一套动画玩法,官方支持3种动画方案,分别是createAnimation、this.animate和CSS3动画。 1.createAnimation与Animation 创建一个动画实例animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。 var animation = wx.createAnimation({ transformOrig... 阅读详情

前言

Android动画可以分三种:View动画 帧动画 属性动画。其实帧动画也属于View动画的一种,只不过它和平移、旋转等常见的View动画在表现形式上略有不同而已。
View动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,它是一种渐进式动画,并且支持自定义。
帧动画通过顺序播放一系列图像从而产生动画效果,可以简单理解为图片切换动画,如果图片过大会OOM。
属性动画通过动态改变对象的属性从而达到动画效果,它为API11新特性,低版本只能用兼容库使用它.

View动画

它的作用对象是View,它支持4种动画效果:平移 缩放 旋转 透明度

在这里插入图片描述

要使用View动画,首先要创建动画的XML文件,路径为 res/anim/filename.xml 动画可以由一系列动画组成

View动画常用属性

duration:持续时间
fillAfter:动画结束以后View是否停留在结束位置

< set>

表示动画集合,对应AnimaionSet类,可包含若干动画,并且内部也可以嵌套其他动画集合,以下是属性
interpolator:表示动画集合所采用的插值器,插值器影响动画的速度,也可以不指定
shareInterpolator:表示集合中的动画是否和集合共享同一个插值器,不指定时自动化就需要单独指定所需的插值器或者默认值

< translate>

表示平移动画,可以使一个View在水平和竖直方向完成动画的平移效果以下是属性
from/toX/YDelte:表示x/y的起始/结束值

< scale>

表示缩放动画,它可以使View具有放大或者缩小的动画效果,以下是属性
from/toX/YScale:水平/数值方向的起始/结束值
pivotX/Y:缩放的轴点的x/y坐标,会影响缩放的效果

轴点

轴点是中心点,这时候在水平方向进行缩放的话会导致View向左右两个方向同时进行缩放,如果把轴点设置成View的右边界,那么View就只会向左边进行缩放

< rotate>

标签表示旋转动画,它可以使View具有旋转的动画效果以下是属性
from/toDegress旋转开始/结束的角度
pivotX/Y:旋转的轴点的x/y坐标
在旋转动画中也有轴点的概念,也会影响到旋转的具体效果,View是围绕着轴点进行旋转的。

< alpha>

标签表示透明度动画,可以改变View的透明度以下是属性
from/toAlpha:透明度的起始/结束值

在这里插入图片描述

通过setAnimationListener可以给View动画添加过程监听

在这里插入图片描述

自定义View动画

大致流程
继承Animation抽象类,然后重写initialize和applyTransformation方法,在initialize方法中做一些初始化工作,在applyTransformation进行相应的矩阵变换,很多时候需要采用Camera来简化矩阵变换的过程。因为自定义View动画的过程主要是矩阵变换的过程,在实际开发中很少用到自定义View动画

帧动画

顺序播放一组预先定义好的图片

在这里插入图片描述

View动画的特殊使用场景

1.LayoutAnimation

它作用于ViewGroup,为ViewGroup指定一个动画,这样当它的子元素出场时都会具有这种动画效果以下是属性

delay:子元素开始动画的时间延迟,比如子元素入场动画的时间周期为300ms,该属性设为0.5则表示美俄子元素都需要延迟150ms才能播放入场动画

animationOrder:子元素动画的顺序 normal reverse random,其中normal表示顺序显示,即排在前面的先开始播放,reverse表示逆向播放,random表示随机播放

animation:为子元素指定具体的入场动画

步骤

1.定义LayoutAnimation

在这里插入图片描述

2.为子元素指定具体的入场动画

在这里插入图片描述

3.为ViewGroup指定layoutAnimation

在这里插入图片描述

使用代码实现

在这里插入图片描述

2.Activity的切换效果

切换效果主要用到overridePendingTransition这个方法,这个方法必须在startActivity(Intent)和finish()之后被调用才生效

参数含义
enterAnim:Activity被打开时,所需的动画资源id
exitAnim:Activity被暂停时,所需的动画资源id
Fragment也可以添加切换动画,可以通过FragmentTransaction中的setCustomAnimation方法来添加切换动画。

属性动画

使用属性动画

1.改变一个对象的的属性
ObjectAnimator.ofFloat

2.改变一个对象的背景色属性
ValueAnimator x=ObjectAnimator.ofInt()
setDuration()
setEvaluator
…

3.动画集合
AnimatorSet set=new AnimatorSet();
set.playTogether(
…
);

还可以通过XML来定义,属性动画需要定义在res/animator/目录下

在这里插入图片描述

< set>标签对应AnimationSet,< animator>标签对应ValueAnimator,< objectAnimator>标签对应ObjectAnimator

ordering:together表示动画集合中的子动画同时播放,sequentially表示动画集合中的子动画按照前后顺序依次播放

< objectAnimator>属性
propertyName:表示属性动画的作用对象的属性的名称
duration:持续时间
valueFrom/To:表示属性的起始/结束值
startOffest:表示动画的延迟时间,当动画开始后需要延迟多少毫秒才会真正播放此动画
repeatCount:表示动画的重复次数
repeatMode:表示动画的重复模式
valueType:表示propertyNmae所指定的属性的类型,有intTyoe和floatTyoe,如果propertyName指定的是颜色,系统会自动对颜色类型的属性进行处理

在这里插入图片描述

理解插值器和估值器

插值器:根据时间流逝的百分比来计算出当前属性值改变的百分比(LinearInterpolator 线性插值器:匀速动画 AccelerateDecelerateInterpolator 加速减速插值器:两头慢中间快 DecelerateInterpolator 减速插值器:越来越慢)

估值器:根据当前属性改变的百分比来计算改变后的属性值(IntEvaluator 针对整型属性 FloatEvaluator 针对浮点型属性 ArgbEvaluator 针对Color属性)

采用线性插值器和整型估值算法

在这里插入图片描述

属性动画要求对象的属性有set方法和get方法(可选)。我们还可以子当以插值器和估值器,只要派生一个类实现接口就好

属性动画的监听器

两个接口AnimatorListener和AnimatorUpadateListener

AnimatorListener

在这里插入图片描述

它可以监听动画的开始、结束、取消和重复播放,同时还提供了AnimatorListenerAdapter,它是监听器的适配器类,这样我们就可以有选择地实现上面的四个方法

AnimatorUpdateListener

在这里插入图片描述

它会监听整个动画过程,动画是由许多帧组成的,每播放一帧它就会被调用一次。

对任意属性做动画

我们对object的属性abc做动画,如果想要让动画生效,要同时满足两个条件

1.object必须提供setAbc方法,如果动画的时候没有传递初始值,那么还要提供getAbc方法,因为系统要去取abc属性的初始值(不满足直接Crash)

2.setAbc对abc的改变必须能够通过某种方法反映出来,比如会带来ui改变(不满足动画无效果但不会Crash)

问题:对Button改变它的宽度无效

Button虽然提供了getWidth和setWidth方法,但并不是改变视图的大小,这两个方法来自TextView

在这里插入图片描述

它的作用不是设置View的宽度,而是设置TextView的最大宽度和最小宽度,这个和TextView的宽度不是一个东西。TextView的宽度对应XML中Android:layout_width,而TextView还有android:width,这个属性就对应了setWidth方法

解决方法

1.给对象加上set get方法,如果有权限
Button由于是SDK内部实现的,不可行

2.用一个类来包装原始对象,简介提供set get方法
利用ViewWrapper类专门用于包装View

在这里插入图片描述

在这里插入图片描述

3.采用ValueAnimator,监听动画过程,自己实现属性的改变
ValueAnimator本身不作用于任何对象,也就是说直接使用它没有任何动画效果。它可以对一个值做动画,我们可以监听其动画过程,在过程中修改对象的属性值

在这里插入图片描述

在这里插入图片描述

属性动画的工作原理

从ObjectAnimator的start()看起

在这里插入图片描述

在这里插入图片描述

如果当前动画、等待的动画、和延迟的动画中有和当前动画相同的动画,那么就把相同的取消。

super.start()其实是ValueAnimator中的start

在这里插入图片描述

上述代码最终会调用AnimationHandler的start方法,它不是一个Handler而是一个runnable,这个runnable涉及底层交互,先忽略,再看ValueAnimator的aoAnimationFrame方法

在这里插入图片描述

在方法的最后调用了animateBaseOnTime方法

在这里插入图片描述

该方法最后又调用了animateValue方法

在这里插入图片描述

calculateValue方法是计算每帧动画所对应的属性的值。下面着重看一下到底是哪里调用属性的get set方法。在初始化时如果属性的初始值没有提供,则get方法会被调用,查看PropertyValuesHolder的setupValue方法

在这里插入图片描述

可以发现get方法是通过反射来调用的

当动画下一帧来临时,PropertyValuesHolder中的setAnimatedValue方法会将新的属性值设置给对象,调用其set方法,查看下面的源码也可以发现set方法也是通过反射调用

在这里插入图片描述

使用动画要注意的问题

1.OOM问题
主要出现在帧动画中,图片数量较多且图片较大时极易出现OOM

2.内存泄漏
有一类无限循环的动画,这类动画要在活动退出时及时停止,否则导致活动无法释放从而造成内存泄露,View动画没有此问题

3.兼容性问题

4.View动画问题
它是对View的影像做动画并不是真正地改变View状态,有时候可能出现动画完成后View无法隐藏的现象,此时调用view.clearAnimation清除View动画即可

5.不要使用px,尽量使用dp,px在不同设备上有不同效果

6.动画元素的交互
注意动画的前后位置

7.硬件加速
建议开启

Android动画(帧动画、补间动画、属性动画)讲解 ** Android动画(帧动画、补间动画、属性动画)讲解 ** 首先我们来看看啥是帧动画、补间动画、属性动画。 介绍: 帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 补间动画:指的是做FLASH动画时,在两个关键帧中间需要做“补间动画”,才能实现图画的运动; 属性动画:帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同 阅读详情

相关推荐

全面掌握Android动画:帧动画、补间动画与属性动画

帧动画是通过一系列连续播放的图像(帧)来创建动态效果的技术。在Android中,帧动画通常是通过类来实现的,它可以将一系列图片组合成一个动画序列。当这些图片连续显示时,给用户的视觉印象就是图片动了起来。帧动画特别适合用于展示简单的动画效果,例如按钮点击后的动画效果或者小图标的变化。补间动画是通过对一系列图像之间进行插值,从而产生动画效果的技术。在Android中,补间动画通常分为四类:位移、缩放、旋转和透明度变化。它们可以独立使用,也可以组合使用以实现复杂的动画效果。

weixin_42518874的博客 847

Android中的动画有哪几类?它们的特点和区别?

1. View动画(Tween Animation):View动画是针对View对象进行动画操作的一种动画类型,可以让View对象在一定时间内,由一个状态渐变到另一个状态。View动画适用于简单的动画效果,帧动画适用于简单的动画效果且资源量小,属性动画在实现动画效果上更加丰富,而转场动画适用于Activity或者Fragment之间的平滑过渡。4. 转场动画(Transitions Animation):转场动画是指在两个Activity或者两个Fragment之间,通过动画的效果来实现平滑的过渡。

qq_41878758的博客 1299

全面解析Android加载动画的实现与优化

ObjectAnimator是Android中非常重要的一个属性动画类。它能够针对对象的一个属性值进行动画操作。例如,可以对一个视图的alpha属性(透明度)进行动画处理,让其从完全不透明到完全透明之间渐变。该类允许指定一个对象以及要改变的属性,然后通过动画系统去改变这个属性值,从而达到动画效果。// 示例代码:使一个视图在3000毫秒内透明度变化在上述代码中,我们首先创建了一个ObjectAnimator对象,并传入了我们想要动画的视图对象view,以及要改变的属性"alpha"

weixin_32661831的博客 1557

Android所有动画分类总结

Android动画分类

xuyin1204的博客 1190

Android加载动画全解析与实战项目

在移动应用开发中,用户体验的流畅性与交互反馈的及时性至关重要。加载动画作为用户等待过程中的视觉反馈机制,不仅能够缓解用户对等待时间的焦虑感,还能提升应用的整体质感和专业度。本章将系统阐述Android加载动画的基本概念、分类方式及其在实际项目中的核心作用。首先介绍加载动画的常见表现形式,包括旋转、缩放、位移、透明度变化等基础动效,并分析其在不同场景下的适用性,如网络请求、数据初始化、页面跳转等。随后深入探讨加载动画在提升界面响应感、增强用户沉浸体验方面的心理学依据和技术价值。

weixin_35370061的博客 886

Java后端实战:钉钉互动卡片消息从配置到生产级对接

在企业级消息推送场景中,机器人通知已从简单的文本向富交互演进。其核心原理在于通过可交互的卡片模板,将传统单向通知升级为双向、有状态的微型应用界面,实现了用户无需跳转即可完成操作的技术价值。这广泛应用于审批、任务确认、数据填报等需要即时反馈的业务流程。本文聚焦于钉钉平台,深入剖析其互动卡片消息机制,并基于Java后端,系统讲解如何实现包括安全验签、异步回调与卡片动态更新在内的生产级对接方案,涵盖配置管理、服务降级等工程实践关键点,助力构建稳定高效的企业消息交互服务。

weixin_30617737的博客 436

android最全的动画讲解

android的动画一共分为三种,view动画,帧动画,属性动画。

xueyoubangbang的博客 7221

避开STM32中断优先级配置的坑:HAL_NVIC_SetPriority()参数你真的用对了吗?

本文深入解析STM32中断优先级配置中的关键问题,重点剖析HAL_NVIC_SetPriority()函数的正确使用方法。通过实际案例揭示优先级分组设置、抢占优先级与子优先级的区别,提供多中断系统中的优化策略和调试技巧,帮助开发者避免常见配置错误,提升系统稳定性。

weixin_42532938的博客 423

Android 动画到底怎么写?万字解析Android三大动画的原理与实践

一篇文章带你掌握安卓三大动画的实际操作及底层原理解析!

小菜的博客 2298

卸载Office 16 Click-to-Run Extensibility Component详细步骤

卸载Office 16 Click-to-Run Extensibility Component详细步骤 第一步:按住键盘上的“Win+R”,打开运行窗口 在运行窗口输入“Installer”回车,打开Installer文件夹 第二步:在Installer文件夹红框最右侧,即“大小”后面,右击选择“其他”,找到“主题”,勾选,点击“确定”,添加主题列成功 第三步:在“主题”列找到“Office 16 Click-to-Run Extensibility Component

M_try的博客 3万+

BQ25798双电源输入4节电池升降压充电与最大功率跟踪于光伏板应用

介绍一颗具有窄范围直流电压NVDC、路径管理PPMT、光伏板最大功率跟踪及反向放电OTG升降压充电控制器,带I2C接口能对内部寄存器做控制

linkedin_38804946的博客 1678

Android动画之场景变换Transition动画的使用

Transition 概述 Trasition 内部保存了所有关于动画的信息,当场景变换时动画将在目标对象上执行。Transition基于两个概念:场景(scenes)和变换(transitions),场景是UI当前状态,变换则定义了在不同场景之间动画变化的过程。 Transition分为三种类型(android5.0中使用)。 进入动画:Activity中的所有视图进入屏幕的动画。 退出动画:...

lidongxiu0714 8267

【毕设级教程】从0到1实现基于YOLOv8的UA-DETRAC交通目标检测系统(含UI界面,助力智能交通毕设)

本项目基于YOLOv8模型和UA-DETRAC数据集开发了一个交通目标检测系统,包含数据处理、模型训练和可视化界面全流程。UA-DETRAC数据集包含多种交通场景下的车辆标注,通过格式转换适配YOLOv8训练要求。系统采用PyQt开发交互界面,支持图像检测、结果显示等功能。该项目技术路线清晰,既展现深度学习在智能交通中的应用,又提供完整的可视化展示方案,适合作为计算机视觉相关毕业设计选题。

m0_64661770的博客 150

Android 动画深度解析

例如,在使用一些较新的转场动画 API 时,如果应用需要兼容低版本系统,可以通过条件判断来使用不同的实现方式,在高版本中使用新的 API 来实现炫酷的转场效果,而在低版本中采用传统的、兼容性更好的动画手段来模拟类似的过渡效果,保证不同版本设备上的用户都能获得相对一致的体验。它突破了传统动画仅针对 View 组件的局限,能够对任何对象的属性施展动画魔法,无论是位置、大小、透明度,还是自定义对象的特有属性,皆可在其掌控之下实现平滑自然的变化。另外,硬件加速也是提升动画性能的一大利器。

iblade的博客 1587

【四足机器人实战】四足机器人运动学、动力学模型

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!四足机器人的运动学和动力学模型是其设计和控制的基础,涉及到如何精确描述和预测机器人在不同条件下的运动状态和行为本文先对四足机器人运动学、动力学模型做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章运动学模型主要关注四足机器人的几何形态和时间序列下的运动特性,而动力学模型则进一步考虑了引起这些运动的力和扭矩的作用效果。运动学模型:运动学模型描述了四足机器人在没有考虑力的影响下的运动特性。

qq_35635374的博客 1055

DDD系列 - 第6讲 仓库Repository - Mybatis篇

书接上回,之前通过一个关于拆解、微服务、面向对象的故事,向大家介绍了如何从微服务、面向对象一步步演进到DDD的,整个演进过程如下图:其中在领域层,我们定义了富血模型的领域模型,包括聚合、聚合根、实体、值对象等。聚合在代码层面中的表现形式即是一个包Package,起到了边界的作用,聚合内的对象间高内聚,而聚合间低耦合。聚合中放着实体、值对象、仓库等,实体相较于值对象的一个典型区别就是实体存在唯一标识,并且可通过该唯一标识查询到该实体并对其进行相关操作,值对象不存在唯一标识且通常作为实体。

罗小爬的技术宝书 1785

Android动画之Transition和TransitionManager使用

1 Transition概述 Transition 在前一篇已经简单讲解了它的使用https://blog.youkuaiyun.com/u010126792/article/details/85794815,这次接着讲解Transition的其他用法和TransitionManager。Transition内部使用了属性动画实现,所以它可以认为是属性动画的封装。Transition两个核心概念为:场景(s...

lidongxiu0714 1万+

S7-200 SMART PLC 数字量阀门控制功能块(FB)汇总

S7-200 SMART PLC功能块的各种写法可以查看专栏的其它文章,链接地址如下:S7-200 SMART PLC 子程序功能块(阀门控制)_RXXW_Dor的博客-优快云博客_plc控制阀门开关程序由于S7-200 SMARTPLC的子程序种种功能、容量限制,有时想实现多次调用的子程序可能并不是太容易,这篇博客还是给出一些推荐写法,供大家参看。

RXXW_Dor的博客 4001

Android动画全面解析:属性动画与补间动画原理、实现与对比

本文详细对比了Android中的补间动画和属性动画两种技术。补间动画通过视图矩阵变换实现视觉效果但不改变实际属性,适用于简单场景;属性动画则通过动态修改对象属性值实现,支持任意对象和自定义动画,灵活性更高。文章从原理、代码实现、使用步骤和核心差异全面解析两种技术,帮助开发者根据需求选择合适方案。补间动画操作简单但功能有限,属性动画功能强大但稍复杂,掌握二者特点能有效提升应用动画效果。

时小雨的专栏 1346

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android属性动画完全解析(上),初识属性动画的基本用法

在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation)。逐帧动画的工作原理很简单,其实就是将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似于动画片的工作原理。补间动画则是可以对View进行一系列的动画操作,包括淡入淡出、缩放、平移、旋转四种。 然而自Android 3.0版本开始,系统给我们提供了一种全新的动

郭霖的专栏 21万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android动画框架深度解析与对比

AndroidX中的Animation库提供最新特性。:使用NineOldAndroids库支持属性动画。:优先使用矢量动画实现分辨率无关效果。:属性动画作为主要动画方案。:物理动画或自定义属性动画。:视图动画或基础属性动画。

斗锋在干嘛的博客 805

Android动画全篇系列(十)——场景过渡动画

文章目录一、场景过渡动画(Scene Transition)动画简介 一、场景过渡动画(Scene Transition)动画简介 借助 Android 的过渡框架,您只需提供起始布局和结束布局,即可为界面中的各种运动添加动画效果。您可以选择所需的动画类型(例如,淡入/淡出视图或更改视图尺寸),而过渡框架会确定如何为从起始布局到结束布局的运动添加动画效果。——亲爸爸谷歌 ...

catzifeng的博客 2747

Android-Animation-Set完全指南:10种动画类型深度解析与实战应用

Android-Animation-Set是一个全面的Android动画教程项目,涵盖了Android平台上所有主流动画类型的详细讲解和实战案例。本指南将带你深入了解10种核心动画类型,从基础概念到实际应用,帮助你轻松掌握Android动画开发技巧。 ## 一、Android动画体系概述 Android动画系统为开发者提供了丰富的动画API,可分为传统视图动画和属性动画两大类。传统视图动画包括

gitblog_00693的博客 987
上一篇: 【学习】Android的Drawable
下一篇: 【学习】Android的Window和WindowMnager
Panic  Lin
博客等级 码龄6年 81粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值