-
自定义自己的ValueAnimator:通过ofObject()方法实现,因为ValueAnimator在执行动画时(通过start()方法执行),中间的值都是通过TypeEvaluator<T>中的evaluate方法产生的。 Interface for use with the setEvaluator(TypeEvaluator) function. Evaluators allow developers to create animations on arbitrary property types, by allowing them to supply custom evaluators for types that are not automatically understood and used by the animation system.查看全部
-
下面的例子是利用ValueAnimator实现一个Button上数字的改变。ValueAnimator是一个timing engine,他负责进行动画时候变化的中间值的计算,比如这个例子,我们就是想看在5000毫秒内,如果一个值从0变化到100,并且进行匀速变化的话是什么情况(我们没有为ValueAnimator设置Interpolator,所以默认的就是匀速变化)。通过addUpdateListener()方法我们可以监听到ValueAnimator在计算和改变值的时候每一帧数据,所以在这个监听器的回调方法中我们就可以通过getAnimatedValue()来获取每一帧的值,从而将它设置到UI上,实现我们想要的效果。所以如果我们不想要动画效果,只关心动画中各个值的变化,我们想获取这些变化的值在动画中的中间值和这些值的变化效果,我们就可以考虑使用ValueAnimator(这个类的名字也取的很贴切)。查看全部
-
不像ObjectAnimator,ValueAnimator不能作用于任何属性。查看全部
-
ObjectAnimator是ValueAnimator的子类,是对ValueAnimator的封装。查看全部
-
ValueAnimator没有ObjectAnimator使用的那么广泛。查看全部
-
ValueAnimator的作用是计算产生动画执行过程中属性的值。正因为有了属性值的变化,动画才能动起来。至于这些属性值是怎么变化的,就是通过相应的ValueAnimator计算出来了。查看全部
-
动画是速度interpolator,他可以定义动画的速度变化,从而实现更加复杂的动画效果。设置interpolator的方法: ObjectAnimator的setInterpolator()方法,参数可以传递各种各样的interpolator,比如: objectAnimator.setInterpolator(new BounceInterpolator());查看全部
-
animator.addListener(new AnimatorListenerAdapter); //只要重写一个事件 animator.setStartDelay(x);//依次弹出x为间隔毫秒 setInterpolator(new XXX);//设置动画的速度变换查看全部
-
AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速 AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速 AnticipateInterpolator 开始的时候向后然后向前甩 AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值 BounceInterpolator 动画结束的时候弹起 CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线 DecelerateInterpolator 在动画开始的地方快然后慢 LinearInterpolator 以常量速率改变 OvershootInterpolator 向前甩一定值后再回到原来位置查看全部
-
ObjectAnimator的玩法:一般我们使用AnimatorSet来实现复杂的动画效果,和各种动画组合。查看全部
-
·使用AnimatorSet来完成 { AnimatorSet set = new AnimatorSet(); ObjectAnimator animator1 = ObjectAnimator.offloat(imageView, "rotation", 0f, 200f); ObjectAnimator animator2 = ObjectAnimator.offloat(imageView, "translationX", 0f, 200f); ObjectAnimator animator3 = ObjectAnimator.offloat(imageView, "translationY", 0f, 200f); set.playTogether(animator1,animator2,animator3); // 动画一起播放 // set.playSequentially(animator1,animator2,animator3); // 顺序播放动画 // 控制动画之间的播放顺序 // set.play(animator2).with(animator3); // 先X和Y一起平移 // set.play(animator1).after(animator3); // 平移完成之后旋转 set.setDuration(1000); set.start(); }查看全部
-
使用PropertyValuesHolder实现组合动画效果。 PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation",0,360F); PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationX",0,360F); PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("translationY",0,360F); ObjectAnimatior.ofPropertyValuesHolder(imageView,p1,p2,p3).setDuration(1000).start(); 好处是便于多种动画的组合和复用查看全部
-
ObjectAnimator调用start()进行动画是异步的,所以如果我们同时开始三个属性动画,那么这三个动画是同时作用的。查看全部
-
ObjectAnimator可以操作很多的属性,只要我们发现一个对象的属性有get和set方法,那么我们就可以通过ObjectAnimator操作它的属性,从而实现特定的动画。查看全部
-
属性动画框架可以代替传统的Animation框架查看全部
举报
0/150
提交
取消