Adnroid 三种动画的实现

来源:互联网 发布:java string split函数 编辑:程序博客网 时间:2024/06/17 11:58

在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后执行。


0 0