Android之属性动画初步

本文探讨了Android属性动画的基本概念,重点介绍了ValueAnimator如何支持不同类型的值,包括int、float和argb颜色。通过对这些基础知识的了解,开发者可以更好地掌握Android动效的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android动画系统包括View animation和Property animation,也就是视图动画和属性动画,属性动画有API限制,必须在API 11以上使用,不过有个开源项目NineOldAndroids,实现了对API 11之前版本的支持。
  视图动画相对于属性动画来说简单一些,只能对view做移动、旋转、缩放等处理。举例来说做View移动的效果,视图发生时改变View在屏幕上的绘制位置,但与这个View相关的属性值却不会改变,所以会发现响应点击事件还在原来的位置上,也就是看上去变了,实际上根还在原来的地方;而属性动画改变的是实际的属性值,也就是View位置发生变化了,他的相关属性值也确实发生了改变。而且属性动画可以改变已有的属性类型,还可以改变自定义的类型,也就是说属性动画是一种广义的动画系统,用于表现一种连续变化的过程,而不仅仅是视图上的物理变化。

属性动画

  属性动画主要涉及Animator、TimeInterpolator、TypeEvaluaor这三个概念。如果把属性动画看作一台机器,那么Animator就是其中的发动机。它定义了属性动画最基本的操作,ValueAnimator是它的子类,实现了动画发生的具体计算过程。值得注意的是,ValueAnimator只负责动画过程中属性值得计算,具体得到这个变化的值如何处理ValueAnimator并不关心,所以需要使用者主动去获取计算好的属性值。

ValueAnimator提供了三种默认支持的值类型,int、float和表示颜色的argb型。例如:

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);  
animation.setDuration(1000);  
animation.start();  
要得到动画发生过程中的值需要给ValueAnimator设置一个监听器ValueAnimator.AnimatorUpdateListener。

animation.addUpdateListener(new AnimatorUpdateListener() {  
    public void onAnimationUpdate(ValueAnimator animator) {  
        Float value = (Float) animator.getAnimatedValue();  
    }  
})  
这样就可以得到整个动画过程产生的中间值。
  中间值的计算涉及到两个方面,一个是插值器函数,也就是对应的Interpolator,表示程度随时间的变化情况,比如匀速、加速,或者先加速后减速等;另一个是中间值的计算函数,对应到TypeEvaluator,这是一个接口,里面有evaluate(float fraction, T startValue, T endValue)方法需要实现,对一般的值计算方法都是startValue + fraction * (endValue - startValue),也有特殊的比如颜色值,用一个int表示了argb,计算的时候就要先分解计算再合成,但对于每个分量的计算任然遵守上面的规则,具体可以看ArgbEvaluator的源文件。
  ValueAnimator除了上面的默认值类型,还支持自定义类型Object,对于自定义类型,使用者需要实现该类型对应的TypeEvaluator,如下
ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);  
animation.setDuration(1000);  
animation.start();  
属性动画要对View起作用需要将每次改变的属性值设置到相应的View上,上面提到ValuAnimator只负责中间值的计算,而没有后面这个值的设置过程,为了更方便地运用,ObjectAnimator这个类诞生了,它继承了ValueAnimator,并在内部实现了设置到View属性上的逻辑。

ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);  
anim.setDuration(1000);  
anim.start();  
其中foo是属性值所属的一个具体对象,比如一个view,alpha是属性名称,ObjectAnimator要求必须有属性名称对应到set和get方法,如上面例子要求foo对应到类必须有setAlpha()和getAlpha()这两个方法。对于View来说设置view的alpha值会触发invalidate而重绘,因此就看到了连续的动画效果。





电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
内容概要:本文详细介绍了IEEE论文《Predefined-Time Sensorless Admittance Tracking Control for Teleoperation Systems With Error Constraint and Personalized Compliant Performance》的复现与分析。论文提出了一种预定义时间的无传感器导纳跟踪控制方案,适用于存在模型不确定性的遥操作系统。该方案通过具有可调刚度参数的导纳结构和预定义时间观测器(PTO),结合非奇异预定义时间终端滑模流形和预定义时间性能函数,实现了快速准确的导纳轨迹跟踪,并确保误差约束。文中详细展示了系统参数定义、EMG信号处理、预定义时间观测器、预定义时间控制器、可调刚度导纳模型及主仿真系统的代码实现。此外,还增加了动态刚度调节器、改进的广义动量观测器和安全约束模块,以增强系统的鲁棒性和安全性。 适合人群:具备一定自动化控制理论基础和编程能力的研究人员、工程师,尤其是从事机器人遥操作、人机交互等领域工作的专业人士。 使用场景及目标:①理解预定义时间控制理论及其在遥操作系统中的应用;②掌握无传感器力观测技术,减少系统复杂度;③学习如何利用肌电信号实现个性化顺应性能调整;④探索如何在保证误差约束的前提下提高系统的响应速度和精度。 阅读建议:本文内容涉及较多的数学推导和技术细节,建议读者先熟悉基本的控制理论和Python编程,重点理解各个模块的功能和相互关系。同时,可以通过运行提供的代码示例,加深对理论概念的理解,并根据自身需求调整参数进行实验验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值