Android动画学习心得

时间:2021-05-17 16:28:19

在Android3.0以后推出了属性动画以取代之前的四种基础动画。

为什么要用属性动画而不用之前的基础动画呢,首先看两者的区别。

比如一个imageview添加了监听事件,在使用了基础动画右移100dp后,点击右移后的imageview是不会触发监听事件的,所以基础动画只是不断地重绘imageview的图片

而当imageview使用属性动画右移100dp后,点击右移后的imageview会触发监听事件,而点击原来的位置并不会,这就大大方便了动画的开发


首先来看下属性动画的一些基本用法:

 ObjectAnimator animator = ObjectAnimator.ofFloat(imglist.get(i), "translationY", i * 150f,0f);

可以看出 ObjectAnimator.ofFloat方法需要传递四个参数

第一个参数是要进行动画的view,第二个参数是字符串,指定要进行动画的属性(理论上任何属性都可以),第三第四个属性是指定属性要变化的范围

同时

animator.setDuration(500);//设定动画持续时长,以ms为单位
animator.start();//启动动画
属性动画还有其他的一个特性,在google官方给出的api中提供了多种动画效果,称为差值器

animator.setInterpolator(new BounceInterpolator());//回弹效果

动画效果分别有

AccelerateInterpolator  加速插值器

DecelerateInterpolator 减速插值器

 AccelerateDecelerateInterpolator  加速减速插值器

LinearInterpolator 线性插值器

BounceInterpolator 弹跳插值器

AnticipateInterpolator 回荡秋千插值器

使用方法在

animator.setInterpolator(new BounceInterpolator())参数中new出来一个就可

同时,动画可以添加监听事件,这里推荐使用<pre style="background-color:#ffffff;color:#000000;font-family:'Consolas';font-size:12.0pt;"><span style="background-color:#e4e4ff;">AnimatorListenerAdapter</span>
因为它可以自主选择监听哪些事件,例如监听结束事件
animator.setInterpolator(new BounceInterpolator());//回弹效果            animator.addListener(new AnimatorListenerAdapter() {                @Override                public void onAnimationEnd(Animator animation) {                    Toast.makeText(MainActivity.this,"展开动画已经结束",Toast.LENGTH_SHORT).show();                }            });


同时,AnimatorSet可以很好地控制动画效果: 

AnimatorSet set=new AnimatorSet();
set.playTogether(animator,animator1);
set.playSequentially(animator,animator1);
set.play(animator).with(animator1).after(animator2).before(animator);

有一起播放,有按顺序播放,也有with,after,bofore等。可以很好地控制动画效果