Android中动画效果的实现(总结)

Android中的动画分为以下三种:

(1)帧动画:本质是通过连续播放图片来实现动画效果。

(2)补间动画:设置动画开始,这是动画结束关键帧,中间过程由系统计算并补齐(针对于View组件进行四种动画改变)。

(3)属性动画:可以理解为“强化版补间动画”,可以针对于View组件的属性进行动画改变,可拓展性非常强。

接下来,分别进行说明:

一、帧动画

(1)在drawable中添加动画文件anim_progress.xml



    
    
    ...

(2)然后在布局文件中,给一个ImageView的背景设置为该帧动画。

android:background="@drawable/anim_progress"

(3)在相应的Activity中调用该动画。

private AnimationDrawable animationDrawable;
animationDrawable = (AnimationDrawable) ivAnim.getBackground();
animationDrawable.start();
animationDrawable.stop();

二、补间动画

在res资源文件夹下,创建anim文件夹,然后创建相应的动画文件。

其中,通过设置android:interpolator可以控制动画的变化速度,它有以下几个可选值:

  • LinearInterpolator:动画以均匀的速度改变
  • AccelerateInterpolator:在动画开始的地方改变速度较慢,然后开始加速
  • AccelerateDecelerateInterpolator:在动画开始、结束的地方改变速度较慢,中间时加速
  • CycleInterpolator:动画循环播放特定次数,变化速度按正弦曲线改变: Math.sin(2 * mCycles * Math.PI * input)
  • DecelerateInterpolator:在动画开始的地方改变速度较快,然后开始减速
  • AnticipateInterpolator:反向,先向相反方向改变一段再加速播放
  • AnticipateOvershootInterpolator:开始的时候向后然后向前甩一定值后返回最后的值
  • BounceInterpolator: 跳跃,快到目的值时值会跳跃,如目的值100,后面的值可能依次为85,77,70,80,90,100
  • OvershottInterpolator:回弹,最后超出目的值然后缓慢改变到目的值

要注意的是:赋值的时候,驼峰命名法变为下划线命名法。可参考下面的例子。

(一)补间动画分为以下几种:

(1)渐变动画


(2)缩放动画


(3)平移动画


(4)旋转动画


(5)组合动画



    
    

    
    

(二)如何在Activity中调用?

private Animation animation;
animation = AnimationUtils.loadAnimation(mContext, R.anim.anim_alpha);
ivAnim.startAnimation(animation);

其他动画,调用方法一样。

 

三、属性动画

实现方式有两种:1、通过代码来实现;2、通过XML动画文件来实现。

1、通过代码来实现属性动画。

private ObjectAnimator objectAnimator;
objectAnimator = ObjectAnimator.ofFloat(tvContent, "alpha", 1f, 0f, 1f);
objectAnimator.setDuration(3000);
objectAnimator.setRepeatMode(ValueAnimator.RESTART);
objectAnimator.setRepeatCount(-1);
objectAnimator.start();

补充一下组合属性动画:

ObjectAnimator objectAnimator_translation = ObjectAnimator.ofFloat(tvContent, "translationY", 0, 100);
ObjectAnimator objectAnimator_alpha = ObjectAnimator.ofFloat(tvContent, "alpha", 1f, 0f, 1f);
ObjectAnimator objectAnimator_rotate = ObjectAnimator.ofFloat(tvContent, "rotation", 0f, 360f);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(objectAnimator_alpha).with(objectAnimator_rotate).after(objectAnimator_translation);
animatorSet.setDuration(5000);
animatorSet.setInterpolator(new LinearInterpolator());
animatorSet.start();

可以看出,只要是View可以设置的属性都可以进行动画变化。比如:textColor,backgroundColor之类的都可以进行变化。

2、通过XML动画来实现动画效果

在res资源文件夹下创建animator文件夹,然后创建动画文件。


在相应的Activity中调用如下:

Animator animator = AnimatorInflater.loadAnimator(mContext, R.animator.animator_alpha);
animator.setTarget(tvContent);
animator.start();

补充一下组合动画:




    

    

最后,如何监听动画的变化过程呢?

//添加动画过程监听
animator.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
    }

    @Override
    public void onAnimationStart(Animator animation) {
        super.onAnimationStart(animation);
    }
});

以上为最常见的用法。

你可能感兴趣的:(Android开发)