Android属性动画
来源:互联网 发布:ih5 知乎 编辑:程序博客网 时间:2024/04/30 08:57
http://blog.csdn.net/guolin_blog/article/details/43536355
主要的类ValueAnimator,ObjectAnimator,AnimatorInflater,AnimatorSet ,PropertyValuesHolder
ValueAnimator核心类,需要初始值和结束值,运行的时长,ValueAnimator从初始值平滑地过渡到结束值。
- ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); 浮点过渡
- anim.setDuration(300);
- anim.start();
ValueAnimator.ofInt(0, 100); 整点过渡
ObjectAnimator常用,继承自ValueAnimator,可以对对象的属性进行操作了。
ofFloat()参数变化。第一个要执行动画的对象,第二个参数是需要操作的属性例如"alpha"等,后面的参数为
过渡的值(开始到结束,参数个数不定)。
- ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f);
- animator.setDuration(5000);
- animator.start();
AnimatorInflater使用XML来编写动画
- Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);
- animator.setTarget(view);
- animator.start();
AnimatorSet组合动画
play()方法中传入一个ValueAnimator或ObjectAnimator将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:
- after(Animator anim) 将现有动画插入到传入的动画之后执行
- after(long delay) 将现有动画延迟指定毫秒后执行
- before(Animator anim) 将现有动画插入到传入的动画之前执行
- with(Animator anim) 将现有动画和传入的动画同时执行
- ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview, "translationX", -500f, 0f);
上面平移动画后俩个参数表示动画开始和结束时x轴的(像素)偏移量。
- ObjectAnimator rotate = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f);
- ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
- AnimatorSet animSet = new AnimatorSet();
- animSet.play(rotate).with(fadeInOut).after(moveIn);
- animSet.setDuration(5000);
- animSet.start();
PropertyValuesHolder组合动画
ObjectAnimator.ofPropertyValuesHolder()方法内可以放任意多个PropertyValuesHolder 对象
PropertyValuesHolder 类似ObjectAnimator对象,但不同点是PropertyValuesHolder 的对象可以当作
ObjectAnimator方法里的参数。
PropertyValuesHolder objectAnimatorScaleX=PropertyValuesHolder.ofFloat("scaleX",0f,1f);PropertyValuesHolder objectAnimatorScaleY=PropertyValuesHolder.ofFloat("scaleY",0f,1f);/**同时播放两个动画**/ObjectAnimator.ofPropertyValuesHolder(iv, objectAnimatorScaleX, objectAnimatorScaleY).setDuration(1000).start();
控件沿贝塞尔曲线轨迹做动画。
示例网址:http://www.tuicool.com/articles/IjeQN3Z
核心代码:ValueAnimator.ofObject(new BezierEvaluator(), new PointF(0,0),new PointF(width,height));
主要用到的类:TypeEvaluator<PointF>,这个类的作用是计算动画当前时间控件所在的位置,它内部只有一个
evaluate(float fraction, PointF startValue, PointF endValue)方法,第一个参数可以理解为当前时间占总时间的比例,根据动画的加速模式自动传入,后两个参数就是ofObject方法参数中的起始值和结束值,在这里我们新建类继承了
TypeEvaluator类,重写evaluate方法,将动画轨迹写成贝塞尔曲线,这时候将新建类的对象当作动画的主体,并输入贝塞尔起点与终点坐标,这时候所谓的动画其实是不可见的,只是沿着贝塞尔曲线的起点到终点过的的坐标的变化,要实现控件按照曲线移动还需要做一步,对动画监听,获取过程中每个点的位置,并设置给控件,这样就达到了控件按照曲线的移动的动画效果。
监听部分代码
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
PointF pointF = (PointF)animation.getAnimatedValue();
te.setX(pointF.x);
te.setY(pointF.y);
}
});
阅读全文
0 0
- Android动画--属性动画
- android动画 -- 属性动画
- Android动画-属性动画
- Android动画【属性动画】
- Android动画--属性动画
- android属性动画--布局动画
- Android 动画之属性动画
- Android中的动画,属性动画
- android-属性动画、视图动画
- Android动画之属性动画
- android动画 属性动画详解
- Android笔记----动画、属性动画
- Android动画之属性动画
- android 动画 之 属性动画
- Android动画之---属性动画
- Android动画之属性动画
- Android动画--属性动画--基础
- Android动画(三):属性动画
- 设计模式简介
- swift字符串,数组,字典和集合的遍历
- Chrome内核解析 -- 背景篇:Chromium的多进程多线程构架
- 自配料的误区,最好搭配净霉宝哦
- Selenium学习笔记21_CSS Selector
- Android属性动画
- 网狐棋牌 麻将信息和麻将索引
- JAVA8之collect总结
- C++ 异常处理浅析
- android 贝塞尔曲线之波浪
- Thread的run()与start()的区别
- 解决Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
- 36. Valid Sudoku
- velocity的简单学习