Android属性动画总结

Android SDK提供的动画方面的API主要存在于两个包里面,分别是android.view.animation和andorid.animation; 其中android.view.animation包是从API1开始就已经有了,主要是提供给补间动画(Tween)使用的API,补间动画的使用方式如下:

Animation rotateAnimation = 
                AnimationUtils.loadAnimation(this, R.anim.rotate_anim);
        //播放动画完成之后,保留动画最后的状态
        rotateAnimation.setFillAfter(true);
        //播放动画
        btnRotate.startAnimation(rotateAnimation);

逐帧动画和补间动画在本文不过多讲解,逐帧动画主要使用xml配置,AnimationDrawable接口去启动动画;

另外一个包android.animation中很多都是API11(3.0)开始加进来的,即所谓的属性动画;新增的属性动画原因在于原来的补间动画只能实现平移,缩放,旋转,淡入淡出等四种针对view的动画,而且补间动画没有改变view的position,因此有些点击事件也无法获取。属性动画的提出不但解决了以上问题,而且提供了更加丰富的动画效果,不仅可以对view进行属性值的改变,还可以对任意对象进行属性值的改变,例如自定义View中将有个Point对象,需要将位置从1移动到100,按照原来补间动画是没办法实现。

属性动画

属性动画最重要的几个东西,Animator属性动画的基类,ValueAnimator和ObjectAnimator都可以去实现动画,相比于ValueAnimator,ObjectAnimator可能才是我们最常接触到的类,因为ValueAnimator只不过是对值进行了一个平滑的动画过渡,但我们实际使用到这种功能的场景好像并不多。而ObjectAnimator则就不同了,它是可以直接对任意对象的任意属性进行动画操作的,比如说View的alpha属性。

ValueAnimator基本使用方法如下:

ValueAnimator anim = ValueAnimator.ofFloat(0f, 5f, 3f, 10f);
anim.setDuration(5000);
anim.start();

ObjectAnimator基本使用方法如下:

ObjectAnimator anim = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
anim.setDuration(500);
anim.start();

 监听类 AnimatorListener,  如果想只实现某个回调则可以用AnimatorListenerAdapter

anim.addListener(new AnimatorListenerAdapter() {
    
})

插值器(Interpolator)和估值器(Evaluator)

插值器是动画过度的速度,常见的插值器有AccelerateInterpolator,DecelerateInterpolator,BounceInterpolator;估值器返回的是当前对象过度的值。自定义的估值器实现TypeEvaluator接口即可,自定义插值器需要实现 TimeInterpolator接口,其中getInterpolation(float input) 返回的就是fraction值。说到这个input的值,我觉得有不少朋友可能会联想到fraction值。那么这里的input和fraction有什么关系或者区别呢?答案很简单,input的值决定了fraction的值。input的值是由系统经过计算后传入到getInterpolation()方法中的,然后我们可以自己实现getInterpolation()方法中的算法,根据input的值来计算出一个返回值,而这个返回值就是fraction了。

ViewPropertyAnimator

属性动画另一种写法textView.animate().x(500).y(500).setDuration(500).setIntepolater(new BounceIntepolater);

猜你喜欢

转载自blog.csdn.net/liangtianmeng/article/details/81365199