安卓动画(Animation)总结

首先,说一下,已经一个多月没写博客了,并没有偷懒,而是总觉得时间不够用,今天仔细想想,写一篇博客的时间还是可以挤出来的,只是自己没有安排好时间而已,毕竟这也算是对学过知识的一种总结,应该坚持,所以从今天开始,我又要继续了,对自己说一声,加油!

今天对Animation的学习做一个总结:

一直觉得动画很炫酷,学了动画之后才知道原来是这么回事!

安卓Animation分为两种:

(1)帧动画  Frame Animation :一张图片就是一帧,很多帧的不停切换便构成了动画

(2)补间动画   Tween Animation :对一张图片就行旋转(Rotate)、平移(Translate)、缩放(Scale)、透明度(Alpha)改变产生的动画效果

一、先是在 xml中设置动画资源,再在MainActivity中加载并开始动画

帧动画的实现:

1.在res资源文件下创建动画资源文件夹 anim,添加frame_anim.xml布局文件

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item  android:drawable="@drawable/img001"></item>
    <item  android:drawable="@drawable/img002"></item>
    <item  android:drawable="@drawable/img003"></item>
    <item  android:drawable="@drawable/img004"></item>
    <item  android:drawable="@drawable/img006"></item>
</animation-list>

2.在要显示的内容面板上设置背景为动画资源

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:id="@+id/content"
    android:orientation="vertical"

    android:background="@anim/frame_anim"               //这里设置
    tools:context="${relativePackage}.${activityClass}" >

</LinearLayout>

3.在MainActivity中设置当点击显示面板时开始动画

LinearLayout content=(LinearLayout)findViewById(R.id.content);

AnimationDrawable animation=(AnimationDrawable)content.getBackground();             //事件监听器里面写

animation.start();

补间动画的实现:

1.在anim动画资源文件夹中添加xml布局文件

旋转:

<rotate
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"                            //动画执行期间的变化速度,控制变换方式
    android:fromDegrees="0"                      //起始角度
    android:toDegrees="270"                      //结束角度
    android:pivotX="0.5"                              
    android:pivotY="0.5"                              //旋转中心   0.5,0.5表示旋转中心在图片的中心
    android:duration="3000"                        //动画持续时间
    xmlns:android="http://schemas.android.com/apk/res/android">

</rotate>

平移:

<translate
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="500"
    android:toYDelta="500"
    android:duration="3000"
    xmlns:android="http://schemas.android.com/apk/res/android">
</translate>

缩放:

<scale
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXScale="0"
    android:toXScale="1"
    android:fromYScale="0"
    android:toYScale="1"
    android:duration="3000"
    xmlns:android="http://schemas.android.com/apk/res/android">

</scale>

透明度:

<alpha
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromAlpha="0"
    android:toAlpha="1"
    android:duration="3000"
    xmlns:android="http://schemas.android.com/apk/res/android">

</alpha>

2.在MainActivity中加载动画资源并开始动画

Animation rotate_anim=AnimationUtils.loadAnimation(getApplicationContext(),R.anim.rotate_anim);                                 //加载旋转动画

让某一图片实现这个动画效果

image.startAnimation(rotate_anim);

二、在MainActivity中添加动画资源并开始动画

补间动画的实现:

AlphaAnimation alpha_anim=new AlaphaAnimation(float fromDegree,float toDegree );

设置属性:

alpha_anim.setDuration(  1000);        //持续时间

alpha.setFillAfter  (boolean b)  ;          //动画结束后是否留在当前位置

alpha.setFillBefore(boolean b);          //动画结束后是否回到起始位置

开始动画

image.startAnimation(alpha_anim);

alpha_anim.setStartOffset();              //设置动画开始前的时间

alpha_anim.setRepeatCount();          //重复次数

alpha_anim.setInterpolator();             //渐变方式

三、AnimationSet的使用

使用AnimationSet可以将几个动画组合成一个动画,

AnimationSet  animationSet=new AnimationSet(true);

animationSet.addAnimation(alpha_anim);

animationSet.addAnimation(rotate_znim);                       //这样将透明度动画和旋转动画组合成一个动画

四、LayoutAnimationController的使用

LayoutAnimationController的作用就是可以是某一个Layout布局中的组件按照你所设定的动画的形式显示出来,其中所有的组件显示方式都是相同的

 例如现在有一个ListView :那么如何让ListView的每一行逐行显示出来

1.设置显示方式动画:

ScaleAnimation scale_anim=new ScaleAnimation(0,1,0,1);

scale_anim.setDuration(1000);

2.设置LayoutAnimationController

LayoutAnimationController    lacon=new LayoutAnimationController(scale_anim,0.5f);  0.5f指的是上一行和写一行显示的时间间隔;

为lacon设置属性: lacon.setOrder();   设置显示的方向

3.将ListView和动画关联

ListView.setLayoutAnimation(lacon);

五、如何自定义一个Animation

1.创建一个类继承Animation,并重写其中的applyTransformation()方法

public class ZidingyiAnimation extends Animation {

 @Override
 protected void applyTransformation(float interpolatedTime, Transformation t) {
  // TODO Auto-generated method stub
  t.getMatrix().setTranslate(200*interpolatedTime, 200*interpolatedTime);
  super.applyTransformation(interpolatedTime, t);
 }
}

这里面通过矩阵变换来实现我们的动画,其中interpolatedTime是一个从0-1自增的数,即0,0.0000000......1,0.0000000000002一直到1

2.在MainActivity中获得我们定义的动画,并为其设置属性:

ZidingyiAnimation my_anim=new ZidingyiAnimation();

my_anim.setDuration(1000);  

3.将动画和我们的图片关联

image.startAnimation(my_anim);

六、AnimationListener的使用

例如我们上面自定义的my_anim动画,我们可以为其设置动画监听事件

my_anim.setAnimationListener(new AnimationListener() {
   
   @Override
   public void onAnimationStart(Animation animation) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onAnimationRepeat(Animation animation) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void onAnimationEnd(Animation animation) {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "结束,", Toast.LENGTH_SHORT).show();
   }
  });

在上面的每个方法里可以写我们的处理事件!

到此为止Animation的内容我所了解的就这么多了,以后学习中肯定还会遇到很多关于Animation的知识,再慢慢积累吧!



你可能感兴趣的:(安卓动画Animation)