随心而动--Animation(2)

本篇主要为Android Animation分析

导读:
1.Animation是什么?
2.Animation分类
3.Tween Animation
4.监听器和插值器
5. LayoutAnimationsController
6.Frame-By-Frame Animation
7.Property Animation
8.总结

五.LayoutAnimationsController

1、LayoutAnimationsController定义:为layout里的控件,或者是viewgroup里面的控件设置动画效果, 每一个控件都有相同的动画, 动画效果可以在不同的时间显示出来,可以在java里面设置,也可以在xml中设置

2.使用方法一:(以listview举例)
在res/anim中创建item——anim文件和layout.xml文件,分别如下:

<!--创建动画-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="0.1"
        android:toAlpha="1"
        android:duration="800"
        />
</set>
<!--控制-->
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:delay="0.2"
    android:animationOrder="random"
    android:animation="@anim/item_anim"
    >
</layoutAnimation>

<!--代码含义:
delay:设置显示延时
Order:设置显示方式(另外还有normal和reverse两种方式)
animation:动画文件
-->

然后在xml为listview添加如下配置android:layoutAnimation=”@anim/layout”
这样子就ok了。

使用方法二:
获取到listview对象后,添加以下代码:

   //创建Animation对象
     Animation animation=(Animation) AnimationUtils.loadAnimation(ScrollingActivity.this,R.anim.item_anim);
      LayoutAnimationController layoutAnimationController=new LayoutAnimationController(animation);
     //设置相关属性   layoutAnimationController.setOrder(LayoutAnimationController.ORDER_NORMAL);
     //配置动画
    listView.setAnimation(layoutAnimationController);

六.Frame-By-Frame Animation

Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XML文件中,也可以完全编码实现。
具体步骤:
1.设置好要展示的布局(例如可以添加一个imageView占位,两个button用于开始和停止动画)

2.在drawable目录下放置动画图片(Flash每一帧的图片)
例如我放了一个loading进度条的每一帧图片。

3.在drawable目录下添加anim_test.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/loading_1" android:duration="80" />
    <item android:drawable="@drawable/loading_2" android:duration="80" />
    <item android:drawable="@drawable/loading_3" android:duration="80" />
    <item android:drawable="@drawable/loading_4" android:duration="80" />
    <item android:drawable="@drawable/loading_5" android:duration="80" />
    <item android:drawable="@drawable/loading_6" android:duration="80" />
    <item android:drawable="@drawable/loading_7" android:duration="80" />
    <item android:drawable="@drawable/loading_8" android:duration="80" />


    <!--oneshot设置true为1次,false为多次-->
</animation-list>

4.在java中配置动画
按钮监听器里添加

      imageView.setBackgroundResource(R.anim.anim_test);
           AnimationDrawable animationDrawable = (AnimationDrawable)
              imageView.getBackground();
           animationDrawable.start();

逐帧动画同样有java实现的方法

   //完全编码实现的动画效果
    AnimationDrawable anim = new AnimationDrawable();
    for (int i = 1; i <= 4; i++) {
      //根据资源名称和目录获取R.java中对应的资源ID
      int id = getResources().getIdentifier("f" + i, "drawable", getPackageName());
      //根据资源ID获取到Drawable对象
      Drawable drawable = getResources().getDrawable(id);
      //将此帧添加到AnimationDrawable中
      anim.addFrame(drawable, 300);
    }
    anim.setOneShot(false); //设置为loop
    image.setBackgroundDrawable(anim); //将动画设置为ImageView背景
    anim.start();  //开始动画

    //anim.stop();//停止动画

此部分java代码还可以封装起来达到多次利用的效果。

七.Property Animation

对于属性动画,下面是郭神的几篇文章,讲解的很好,大家可以参考一下
Android属性动画完全解析(上),初识属性动画的基本用法

Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法

转载自郭霖的博客:CSDN博客

八.总结

本文参考:Mars Android视频第二季 和 我的github博客
如有错误,请在留言区指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章