属性动画

1、属性动画简介

  Android开始提供了两种动画,逐帧动画和补间动画(frame-by-frame animation & tweened animation),补间动画是对View进行一系列动画操作,作用只能在View上,有很大缺陷。因此google推出了属性动画,属性动画不只是视觉上的动画效果,而实际上是一种不断地对值操作的机制。可以是任意对象的任意属性能

 

2、ValueAnimator

  是属性动画中最核心的一个类,根据初始值和结束值,动画时长计算动画的平滑过渡

        ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
        anim.setDuration(300);
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float currentValue = (float) animation.getAnimatedValue();
                Log.d("Anim", "------>" + currentValue);
            }
        });
        // 延迟播放时间
        // anim.setStartDelay();
        // 循环播放次数
        // anim.setRepeatCount(1);
        // 重新播放和倒序播放 ValueAnimator.RESTART ValueAnimator.REVERSE
        // anim.setRepeatMode(ValueAnimator.RESTART);
        anim.start();

  

3、ObjectAnimator

  可以操作任意对象

       float curTranslationX = text_view.getTranslationX();
            ObjectAnimator animator = ObjectAnimator.ofFloat(text_view, "translationX", curTranslationX, -500f);
            animator.setDuration(5000);
            animator.start();

            ObjectAnimator.ofFloat(text_view, "scaleY", 1f, 3f, 1f).setDuration(5000).start();

  

4、组合动画的实现

  AnimatorSet实现了组合动画
    after(Animator anim) 将现有动画插入到传入的动画之后执行
    after(long delay) 将现有动画延迟指定毫秒后执行
    before(Animator anim) 将现有动画插入到传入的动画之前执行
    with(Animator anim) 将现有动画和传入的动画同时执行

        ObjectAnimator moveIn = ObjectAnimator.ofFloat(text_view, "translationX", -500f, 0f);
        ObjectAnimator rotate = ObjectAnimator.ofFloat(text_view, "rotation", 0f, 360f);
        ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(text_view, "alpha", 1f, 0f, 1f);
        AnimatorSet animSet = new AnimatorSet();
        animSet.play(rotate).with(fadeInOut).after(moveIn);
        animSet.setDuration(5000);
        animSet.start();

  

5、Animator监听

  动画的监听可以有两种实现,根据需求决定是否完整实现

        // 动画监听的全部方法
        animator.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) {
                // 重复执行
            }
        });

        // 实现动画监听的部分方法
        animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
            }
        });

  

posted @ 2015-08-26 14:30  轻云沉峰  阅读(134)  评论(0)    收藏  举报