动画之属性动画基础篇

2018-09-19  本文已影响0人  _Rice_

属性动画

属性动画,改变view或者object的属性实现动画,属性动画比补间动画更强大,不但可以实现旋转、平移等操作还可以自己定义动画效果,监听动画过程并作出相应动作。

属性动画的特性:
属性动画的优点:

相关API

相关属性:

Duration动画的持续时间,默认300ms。

相关的类

1、ValueAnimator

ValueAnimator内部使用一种时间循环机制来计算值与值直接的动画过渡。我们只需要将属性的取值范围、执行时长提供给ValueAnimator,那么就会自动帮我们计算属性值在各动画时段的取值,这些值会按照一定计算方式来实现过渡。除此之外它还负责管理播放次数、播放模式、动画监听。功能强大,自由度高,意味着开发人员需要做更多工作去实现动画需求

通常我们都是通过ofFloat、ofInt等静态工厂函数构建ValueAnimator,

    animator = ValueAnimator.ofFloat(0f, 100f);
                animator.setDuration(1000);
                //每次更新属性值时就会调用onAnimationUpdate函数,在这里可以获得新的属性值
                //十分灵活,只操作属性值,可以运用于任何对象之上
                animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {
                        float animatedValue = (float) animation.getAnimatedValue();
                        mAnimationView.setTranslationX(animatedValue);
                        }
                    }
                });
    animator.start();

2、ObjectAnimator

valueAnimator只是对值进行一个平滑的动画过渡,而ObjectAnimator可以对目标对象的某个属性值进行修改,也就是说某个对象执行动画,同时不再需要实现它AnimatorUpdateListener,因为动画属性会自动更新,通过目标对象属性的setter函数更新属性值,如果没有setter函数,那么将会通过反射去更新。

示例
代码实现
animator = ObjectAnimator.ofFloat(mAnimationView,"translationX",0,200);
                animator.setDuration(1000);
                animator.start();
xml实现

放在res/animator目录下


Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);
animator.setTarget(view);
animator.start();
备注:

AnimatorListener

实现类有AnimatorListenerAdapter

例子
        ObjectAnimator animator1 = ObjectAnimator.ofFloat(mAnimationView, "translationX", 100f);
                animator1.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {
                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {
                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {
                    }
                });
                animator1.setDuration(1000);
                animator1.start();
上一篇 下一篇

猜你喜欢

热点阅读