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可以控制动画的变化速度,它有以下几个可选值:
要注意的是:赋值的时候,驼峰命名法变为下划线命名法。可参考下面的例子。
(一)补间动画分为以下几种:
(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);
}
});
以上为最常见的用法。