持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
前面把补间动画的四种动画类型实现都介绍了,AlphaAnimation(渐变动画)、ScaleAnimation(缩放动画)、TranslateAnimation(位移动画)和RotateAnimation(旋转动画),各自都有各自的属性,但是共同点就是都有2种实现方式,动画设置的属性,除了自身参数设置,其他属性基本一直,那么如果我们想实现多种动画同时执行,按序执行,展示出更炫的效果,那么就可以把几种动画结合起来,通过AnimationSet来统一执行,也就是今天我们要介绍的组合动画。
AnimationSet 的实现
AnimationSet类本身是Animation类的子类,而Animation类则是用于实现基础动画效果的,AnimationSet允许一个界面组件同时执行多种动画效果。
其实通过描述或者通过源码查看,可以看出来AnimationSet其实是一个动画集合,把需要执行的动画方式初始化后,通过AnimationSet的add方法将各种动画添加进去,然后调用view的startAnimation方法就可以把多种动画的效果组合起来执行,实现多种动画按序播放的效果了,废话不多说,直接上代码。
public class MainActivity extends Activity {
private ImageView iv_anim;
private Button startAnim;
private Button cancelAnim;
private TranslateAnimation translateAnimation;
private ScaleAnimation scaleAnimation;
private AlphaAnimation alphaAnimation;
private RotateAnimation rotateAnimation;
private AnimationSet animationSet;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//ImageView对象
iv_anim = (ImageView) findViewById(R.id.image_anim);
//按钮对象
startAnim = (Button) findViewById(R.id.btn_start);
cancelAnim = (Button) findViewById(R.id.btn_cancel);
translateAnimation = new TranslateAnimation(0, 200, 0, 200); //设置位置变化动画
scaleAnimation = new
ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//设置尺寸变化动画
alphaAnimation = new AlphaAnimation(0.1f, 1.0f); //设置透明度变化动画
rotateAnimation = new RotateAnimation(0f, 359f);
animationSet = new AnimationSet(true); //建立动画集对象
//设置位置变化动画的持续时间
translateAnimation.setDuration(2000);
//设置尺寸变化动画的持续时间
scaleAnimation.setDuration(2000);
//设置透明度渐变更画的持续时间
alphaAnimation.setDuration(2000);
rotateAnimation.setDuration(2000);
//添加位置变化动画
animationSet.addAnimation(translateAnimation);
//添加尺寸变化动画
animationSet.addAnimation(scaleAnimation);
//添加透明度渐变更画
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(rotateAnimation);
//停留在最后的位置
animationSet.setFillAfter(true);
animationSet.setFillEnabled(true);
//设置动画
iv_anim.setAnimation(animationSet);
//设置监听器
startAnim.setOnClickListener(v -> {
//启动动画
animationSet.startNow();
});
//设置监听器
cancelAnim.setOnClickListener(v -> {
//取消动画执行
animationSet.cancel();
});
}
}
四种动画都用到了,效果随便写了下,想要什么样的效果,可以通过设置相应动画的实现就好了,想怎么炫就怎么炫,实现起来是不是也很简单,其实组合动画也可以通过xml+java的实现方式来实现,但是这里就不举例说明了,因为一般不推荐,还不如直接java代码来的直接,像实现稀奇古怪,绚丽多彩的动画效果,就打开脑洞,动起手来玩起来吧。