在android中,一般有四种动画效果:
1.透明度
2.旋转
3.平移
4.缩放
动画模式:
1.帧动画 Frame by frame
2.渐变动画 Tweened Animation
3.属性动画 Properties Animation
首先来说下帧动画。帧动画,顾名思义,就是一帧一帧的放图片。可以创建一个XML文件,然后在animation-list标签下,一张一张的插入图片,设置属性,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/g1" android:duration="100"/>
<item android:drawable="@mipmap/g2" android:duration="100"/>
<item android:drawable="@mipmap/g3" android:duration="100"/>
<item android:drawable="@mipmap/g4" android:duration="100"/>
<item android:drawable="@mipmap/g5" android:duration="100"/>
<item android:drawable="@mipmap/g6" android:duration="100"/>
<item android:drawable="@mipmap/g7" android:duration="100"/>
<item android:drawable="@mipmap/g8" android:duration="100"/>
<item android:drawable="@mipmap/g9" android:duration="100"/>
<item android:drawable="@mipmap/g10" android:duration="100"/>
<item android:drawable="@mipmap/g11" android:duration="100"/>
</animation-list>
然后在Activity文件中:
img = (ImageView) findViewById(R.id.imageView);
AnimationDrawable ad = (AnimationDrawable) img.getDrawable();
ad.start();
渐变动画,可以在xml文件里定义效果:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<rotate
android:duration="3000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="+350" />
</set>
上面的代码是一个旋转的动画,各个参数中:
duration:动画的持续时间
fromDegrees 从哪个角度开始旋转
toDegrees 旋转结束时的角度
pivotX 旋转点x轴坐标,可以是int,float或百分比类型
pivotY 旋转点y轴坐标,同上
Activity代码:
Animation animation = AnimationUtils.loadAnimation(MainActivity.this,R.anim.rotate);
ivGirl.startAnimation(animation);
详细的例子请看:http://blog.csdn.net/dmk877/article/details/51912104
也可以在Activity中直接写代码,比如说透明度动画:
AlphaAnimation aa = new AlphaAnimation(1.0f,0.5f);
aa.setDuration(2000);//ms:毫秒 该动画的变化过程将会在2s中内完成
aa.setFillAfter(true);//动画效果结束后 保持当前效果
/**重复的个数*/
aa.setRepeatCount(1);
/**
* 重复的模式
* Animation.RESTART:重新开始
* Animation.REVERSE:反向*/
aa.setRepeatMode(Animation.REVERSE);
/**开始动画*/
img.startAnimation(aa);
旋转动画就是RotateAnimation;平移动画:TranslateAnimation;缩放动画:ScaleAnimation
具体参数和xml文件里介绍的差不多。
此外,可以用动画集合装载这些动画并实现 AnimationSet as = new AnimationSet(true); 用add方法as.add(动画变量名);img.startAnimation(as);
属性动画(properties Animation)
属性动画实现的效果和渐变动画差不多,但是有一点根本性的差别:渐变动画不会真正改变控件的位置,而属性动画会真正的改变控件的位置。
属性动画对象ObjectAnimator,该对象的构造参数:第一个为目标控件,第二个为要执行的动画的名称,第三个为数值(可以任意填多少个)。
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);
animator.setDuration(2000);
animator.start();
上面代码就是执行一个tv控件由不透明变成透明再变成不透明的动画效果。setDuration(2000)表示该动画一共执行2s完成
同样,属性动画也可以装进动画集合,一起或分步执行:
ObjectAnimator oa = ObjectAnimator.ofFloat(btn_toMain,"rotation",180.0f,360.0f);
ObjectAnimator oa1 = ObjectAnimator.ofFloat(btn_toMain,"alpha",0.0f,1.0f);
AnimatorSet as = new AnimatorSet();
as.setDuration(1000);
as.playTogether(oa,oa1);
as.start();
表示一起执行。
as.play(oa).after(oa1)
表示oa在oa1后执行。