《Android自定义控件入门与实战》读书笔记--第4章 属性动画进阶

4.1 PropertyValuesHolder 和 Keyframe

4.1.1 PropertyValuesHolder

  1. 保存了动画过程中所需要操作的属性和对应的值
1.ofInt()
2.ofFloat()
3.ofObjec()

4.1.2 Keyframe

  1. 关键帧:控制动画速率,包含:时间点和位置
Keyframe frame0 = Keyframe.ofFloat(0f,0);
Keyframe frame2 = Keyframe.ofFloat(0.1f,-20f);
Keyframe frame2 = Keyframe.ofFloat(1f,0);
PropertyValuesHolder frameHolder = PropertyValuesHolder.ofKeyframe("rotation",frame0,frame1,frame2);
ObjectAnimator.ofPropertyValueHolder(iv,frameHolder).start();
  1. 在使用 ofObject() 需要调用 frameHolder.setEvaluator 函数设置 Evaluator
  2. 去掉帧
  • 去掉第 0 帧,第一个帧为起始位置
  • 去掉结束帧,最后一个帧为结束位置
  • 至少要有 2 帧

4.2 ViewPropertyAnimator

tv.animate().alpha(0f);
可以设置监听器
tv.animate().alpha(0f).setListener()

4.2.3 性能考量

  1. 没有像 ObjectAnimator 使用反射或 JNI 技术,根据预设的每一个动画帧计算出对应的所有属性值,并且设置给控件,然后调用 invalidate() 重绘。

4.3 为 ViewGroup 内的组件添加动画

  1. 方式
  • layoutAnimation 标签与 LayoutAnimationController
  • gridlayoutAnimation 标签与 GridlayoutAnimationController
  • android:animatelayoutChanges=“true” 属’性
  • LayoutTransition(可以实现 ViewGroup 动态添加或删除其中的控件时指定动画)

4.3.2 LayoutTransition

//新建
LayoutTransition transition = new LayoutTransition();
//设置动画
ObjectAnimator rotation = ObjectAnimator.ofFloat(null, "rotation", 0f, 90f, 0f);
transition.setAnimator(LayoutTransition.DISAPPEARING,rotation);
//设置transition
ll.setLayoutTransition(transition);
  1. 设置监听 addTransitionListener()

4.4 开源动画库 NIneOldAndroids

4.4.2 NineOldAndroids 中的 ViewHelper

  1. 判断版本 -> 小于 API 11 时候 会调用 AnimatorProxy 类中的 wrap() 函数对 View 进行包装
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值