property Animaton属性动画

来源:互联网 发布:face nginx 编辑:程序博客网 时间:2024/06/05 14:50

看了Google官网上面的属性动画的介绍,总结一下上面的知识要点:


ValueAnimator:
封装了一个TimeInterpolator,用于决定动画计算的速度,如加减速或者匀速变化。同时还封装了一个TypeEvaluator,这个参数决定如何计算startValue到endValue动画属性的值,比如IntEvaluator,FloatEvaluator。也就是说,TimeInterpolator决定了从0到1的fraction变化情况,而TypeEvaluator则是在TimeInterpolator基础上确定从startValue到endValue的变化情况。

Animator.AnimatorListener接口可监听动画的各个阶段。假如不想实现该接口里面所有的方法,可以继承AnimatorListenerAdapter这个类,该类实现了Animator.AnimatorListener这个接口,并且是一个空的方法。

假如在一个viewgroup中要给addview或者removeview添加动画效果,可以用LayoutTransition来实现。LayoutTransition自带默认的动画,也可以自定义动画。使用方法如下:
A(代码中设置,可以自定义动画):
1.生成一个LayoutTransition对象
2.给它设定自己自定义的动画(或者不设,直接用默认的)
3.将LayoutTransition传给ViewGroup。ViewGroup.setLayoutTransition().
B(xml中设,用的是默认动画)
直接在viewgroup中将android:animateLayoutChanges="true"即可。

Keyframe,字面意思也就是关键帧。作用是可以给某一个时刻(fraction,0到1之间)设定对应的值,比如下面的要对一个东东进行旋转:
Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("rotation", kf0, kf1, kf2);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
rotationAnim.setDuration(5000ms);

当要对View进行操作时,View中的一些属性有:
translationX,translationY:移动的距离
rotation,rotationX,rotationY:旋转
scaleX,scaleY:放大缩小
x,y:View最终的距离,由left,top与translationX,translationY之和决定
alpha:透明度

ViewPropertyAnimator的作用是同时执行多种动画,而且它的代码使用起来比ObjectAnimator更加简介明了。使用如下:
ViewPropertyAnimator  vp = View.animate();
vp.alpha().x().y()...等等

在xml中也可以用属性动画,分别是ValueAnimator ,ObjectAnimator,AnimatorSet。假如用在Eclipse中,需要把xml文件放到res/animator中,否则无效。在带代码中使用xml的动画时,需要先inflate,然后在setTarget来设定执行该动画的Object。如下:
AnimatorSet set = AnimatorInflator.loadAnimator(context , R.anim.property_animator);
set.setTarget(Object);
set.start();

0 0
原创粉丝点击