隨心而動--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博客
如有錯誤,請在留言區指出。

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