属性动画ValueAnimator用法
用法举例:
1. ValueAnimator animator = ValueAnimator.ofInt(0,100);//定义animator
2. animator.addUpdateListener//添加更新监听事件
3. animator.setDuration//设置属性动画时长
4. animator.start//开启属性动画
报错说明api版本太低,要导入nineold jar包
也许是开发者他女儿9岁了的时候开发出来的兼容包,哈哈
nineoldandroids-2.4.0.jar
java代码:
1 private boolean isOpen = false;// 标记安全描述开关状态,默认关 2 3 // 打开或者关闭安全描述信息(如果是打开状态就关闭,如果是关闭状态就打开) 4 // 导入jar包: nineoldandroids-2.4.0.jar 5 protected void toggle() { 6 ValueAnimator animator = null; 7 if (isOpen) { 8 // 关闭 9 isOpen = false; 10 // 属性动画 11 animator = ValueAnimator.ofInt(mDesHeight, 0);// 从某个值变化到某个值 12 } else { 13 // 开启 14 isOpen = true; 15 // 属性动画 16 animator = ValueAnimator.ofInt(0, mDesHeight); 17 } 18 19 // 动画更新的监听 20 animator.addUpdateListener(new AnimatorUpdateListener() { 21 22 // 启动动画之后, 会不断回调此方法来获取最新的值 23 @Override 24 public void onAnimationUpdate(ValueAnimator animator) { 25 // 获取最新的高度值 26 Integer height = (Integer) animator.getAnimatedValue(); 27 28 System.out.println("最新高度:" + height); 29 30 // 重新修改布局高度 31 mParams.height = height; 32 llDesRoot.setLayoutParams(mParams); 33 } 34 }); 35 36 animator.addListener(new AnimatorListener() { 37 38 @Override 39 public void onAnimationStart(Animator arg0) { 40 41 } 42 43 @Override 44 public void onAnimationRepeat(Animator arg0) { 45 46 } 47 48 @Override 49 public void onAnimationEnd(Animator arg0) { 50 // 动画结束的事件 51 // 更新小箭头的方向 52 if (isOpen) { 53 ivArrow.setImageResource(R.drawable.arrow_up); 54 } else { 55 ivArrow.setImageResource(R.drawable.arrow_down); 56 } 57 } 58 59 @Override 60 public void onAnimationCancel(Animator arg0) { 61 62 } 63 }); 64 65 animator.setDuration(200);// 动画时间 66 animator.start();// 启动动画 67 }
运行效果图: