700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【Android 属性动画】属性动画 Property Animation 工作原理 ( 线性插值动画 |

【Android 属性动画】属性动画 Property Animation 工作原理 ( 线性插值动画 |

时间:2024-01-13 22:06:29

相关推荐

【Android 属性动画】属性动画 Property Animation 工作原理 ( 线性插值动画 |

文章目录

一、线性插值动画示例二、非线性插值动画示例三、动画计算方式四、时间经过分数 ( Elapsed Fraction )五、插值分数 ( Interpolated Fraction )六、类型估值器 ( TypeEvaluator )

一、线性插值动画示例

线性插值动画示例 :

1.动画内容 :上图描述了一个假设的组件,修改其 x 属性生成动画 , 该属性代表组件在屏幕上水平方向的位置;2.动画时长 :40ms ( 毫秒 ) , 动画从开始到结束 , 持续时间 40ms ( 毫秒 );3.属性范围 :属性 x 在动画开始时为 0 px ( 像素 ) , 动画结束时 为 40 ms ( 毫秒 );该动画需要在 40ms 内移动 40px (像素 ) ;4.动画刷新频率 :默认的帧刷新频率是 10ms ( 毫秒 ) , 每隔 10ms ( 毫秒 ) 在水平方向上移动 10px ( 像素 ) ;5.动画停止 :在 40ms ( 毫秒 ) 结尾时 , 动画停止 , 该组件停在水平方向 40px ( 像素 ) 的位置 ;6.线性插值器 :该示例中 , 动画使用的插值器是线性插值器,即该组件以匀速运动的方式生成动画 ;

二、非线性插值动画示例

非线性插值动画示例 :

1.非线性插值器 :可以给动画指定一个非线性差值器,动画会以加速或减速形式运动;2.示例描述 :上图中描述了一个假设的组件 , 其在动画开始阶段加速运动 , 动画结束阶段减速运动 ;3.动画描述 :该组件仍然是在 40ms ( 毫秒 ) 内移动 40px ( 像素 ) ;4.开始阶段 :在开始阶段 , 开始位置 到 中点位置 , 组件加速运动 ;5.结束阶段 :在结束阶段 , 中点位置 到 结束位置 , 组件减速运动 ;

组件在开始和结尾时间段运行的距离 , 要少于中间时间阶段的运行距离 ;

三、动画计算方式

属性动画系统中计算动画的重要组件 :

1.ValueAnimator ( 值动画类 ) :该对象追踪动画的计时时间 和 属性值设置,如 动画已经运行了多长时间 , 以及当前属性动画当前的属性值;2.ValueAnimator 封装内容 :① TimeInterpolator ( 时间差值器 ) :其中定义了一个动画的时间差值器 ;② TypeEvaluator ( 类型估值器 ) :定义了如何计算 生成属性动画的属性值 ;3.示例 :如在上述非线性插值动画示例中,使用的 TimeInterpolator ( 时间差值器 ) 是AccelerateDecelerateInterpolator,TypeEvaluator ( 类型估值器 ) 是IntEvaluator;

四、时间经过分数 ( Elapsed Fraction )

时间经过分数 ( Elapsed Fraction ) 说明 :

1.设置参数 :启动属性动画 , 需要先创建 ValueAnimator,设置动画的持续时间 ,设置 动画执行期间内的 属性值改变的 起始值 和 终止值;2.执行动画 :调用动画的 start() 方法后 , 动画开始执行 ;3.出现 时间经过分数 ( Elapsed Fraction ) :在动画执行过程中,ValueAnimator 基于动画的总时间 TTT,和 已经经过的时间 ttt,计算出 时间经过分数 tT\cfrac{t}{T}Tt​ , 该分数取值范围 [0,1][0, 1][0,1] ;4.时间经过分数 ( Elapsed Fraction ) 说明 :时间经过分数 ( Elapsed Fraction ) 代表了动画完成的百分比,000 代表 0%0\%0% 动画刚开始 , 111 代表 100%100\%100% 动画完成 ;5.举例说明 :在上面的 线性插值动画示例 中,在 10ms 时 , 其 时间经过分数 ( Elapsed Fraction ) 是 tT=1040=0.25\cfrac{t}{T} = \cfrac{10}{40}=0.25Tt​=4010​=0.25 ;

五、插值分数 ( Interpolated Fraction )

插值分数 ( Interpolated Fraction ) :

1.计算方式 :当 ValueAnimator 计算出 时间经过分数 ( Elapsed Fraction ) 后,需要调用当前设置的 时间差值器 ( TimeInterpolator ) , 计算出 插值分数 ( interpolated fraction );2.插值分数 ( Interpolated Fraction ) 与 经过分数 ( Elapsed Fraction ) 对应关系 :经过分数 通过 设置的 时间插值信息进行计算得出插值分数;3.非线性插值示例 :在上述 非线性插值动画示例 中,在开始时 , 动画处于缓慢加速状态中,在 10ms 时刻 , 其差值分数大约是 0.150.150.15,此时经过分数是 0.250.250.25 , 比插值分数要大;4.线性插值示例 :在上述 线性插值动画示例 中,任何一个时刻的 经过分数 都 等于 插值分数;

六、类型估值器 ( TypeEvaluator )

类型估值器 ( TypeEvaluator ) :

1.类型估值器 ( TypeEvaluator ) 作用 :当 插值分数 ( Interpolated Fraction ) 被计算出来后,ValueAnimator 会调用适当的 类型估值器 ( TypeEvaluator ) , 计算当前正在运行的动画的属性值 ;2.计算方式 :基于 当前的 插值分数 ( Interpolated Fraction ) FcF_cFc​,开始时的属性值 VsV_sVs​,结束时的属性值 VeV_eVe​,当前属性值 VcVcVc :

Vc=Vs+Fc(Ve−Vs)V_c=V_s + F_c(V_e-V_s)Vc​=Vs​+Fc​(Ve​−Vs​)3.示例 :上述 非线性插值示例 10ms 时刻,当前的 插值分数 ( Interpolated Fraction ) Fc=0.15F_c=0.15Fc​=0.15 , 开始时的属性值 Vs=0V_s=0Vs​=0 , 结束时的属性值 Ve=40V_e=40Ve​=40 , 当前属性值 :Vc==Vs+Fc(Ve−Vs)=0+0.15×(40−0)=6Vc==V_s + F_c(V_e-V_s)=0+0.15\times(40-0)=6Vc==Vs​+Fc​(Ve​−Vs​)=0+0.15×(40−0)=6

当前的属性值是 666 ;

【Android 属性动画】属性动画 Property Animation 工作原理 ( 线性插值动画 | 非线性插值动画 | 动画计算 | 经过分数 | 插值分数 | 类型估值器)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。