PropertyValuesHolder与Keyframe 笔记

PropertyValuesHolder

ValueAnimator和ObjectAnimator都有对应的ofPorpertyValuesHolder方法

PorpertyValuesHolde创建实例的方法

java 复制代码
public static PropertyValuesHolder ofFloat(String PropertyName,float... values)
public static PropertyValuesHolder ofInt(String PropertyName,int... values)
public static PropertyValuesHolder ofObject(String PropertyName,TypeEvaluator evaluator,Object... values)
public static PropertyValuesHolder ofKeyFrame(String PropertyName,KeyFrame... values)

ofFloat,ofInt使用示例

java 复制代码
PropertyValuesHolder holder = PropertyValuesHolder.ofFLoat("alpha",0.1f,0.3f,0.7f,1f);
ObjectAnimator animator = ObjectAnimator.ofPorpertyValuesHolder(view,holder);
animator.setDuration(2000);
animator.start();

ofObject方法参数,可以实现一个自定义的插值器,使用实例:

java 复制代码
    public class CharEvaLuator implements TypeEvaluator<Character>{
        @Override
        public Character evaluate(float fraction, Character startValue, Character endValue) {
            int startInt = startValue;
            int endInt = endValue;
            int curInt = startInt + fraction * (endInt- startInt);
            char result = (Char)curInt;
            return result;
        }
    }
    
    PropertyValuesHolder holder = PropertyValuesHolder.ofObject("CharText",new CharEvaluator,
    new Character('A'),new Character('Z'));
    ObjectAnimator animator = ObjectAnimator.ofPorpertyValuesHolder(tv,holder);
    animator.setDuration(2000);
    animator.start();
    
    //注意因为TextView 中setText(CharSequence text)参数,需要内部自定义setCharText(Charactor text)结合ofObject使用

Keyframe

keyframe 我个人感觉可以理解为好比做动画时绘制的帧。

java 复制代码
public static KeyFrame ofFloat(float fraction,float duration)
//fraction 当前显示的进度,value 当前动画所在数值位置

ofFloat,ofInt使用实例:

ini 复制代码
KeyFrame frame0 = KeyFrame.ofFloat(0f,0);
KeyFrame frame1 = KeyFrame.ofFloat(0.5f,50);
KeyFrame frame2 = KeyFrame.ofFloat(1f,100);
PropertyValuesHolder holder = PropertyValuesHolder.ofKeyframe("alpha",frame0,frame1,frame2);
ObjetAnimator animator = ObjetAnimator.ofPropertyValuesHolder(view,holder);
animator.setDuration(2000);
animator.start();

//也可以给除第一帧以外的设置插值器
frame1.setInterpolator(new BounceInterpolator());

ofObject()同样也可以实现一些自定义的属性参数,例如

ini 复制代码
KeyFrame frame0 = KeyFrame.ofObject(0,new Character('A'));
KeyFrame frame1 = KeyFrame.ofObject(0,new Character('B'));
KeyFrame frame2 = KeyFrame.ofObject(0,new Character('C'));

//结合上面的CharEvaLuator自定义插值器使用
PropertyValuesHolder holder = PropertyValuesHolder.ofKeyframe("CharText",frame0,frame1,frame2);
holder.setEvalutar(new CharEvaLuator());
ObjetAnimator animator = ObjetAnimator.ofPropertyValuesHolder(view,holder);
animator.setDuration(2000);
animator.start();
注意
  1. 多个KeyFrame,都会默认把第一个frame设为首帧,最后一个设为尾帧,不管是不是你期望的效果

  2. 必须存在2个或2个以上的frame,不然会报数组越界

相关推荐
BoomHe19 分钟前
Android Framework 文件应用移植到 AndroidStudio
android
传奇开心果编程2 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
>Andre<2 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
事圆则缓3 小时前
Java 8 Lambda、Stream、Optional 与 Android 边界:从回调语法到运行时兼容
android·java
mmsx3 小时前
Android 地图十万要素不卡顿:空间网格 + 渐进式加载的移动端实践
android·大数据·opengl
Godikov5 小时前
Android 工业终端保活实战:前台服务 + 开机自启 + 更新自启的三重保障
android
字节暗面5 小时前
SO加固强度怎么量化?腾讯ACE与FairGuard静态分析实测
android·逆向
终端安全笔记6 小时前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
字节暗面7 小时前
一次游戏安全SO静态分析记录:腾讯ACE与FairGuard加固强度对比
android·逆向工程·游戏加固
传奇开心果编程7 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack