在預設的情況之下,當你給一個ViewGroup添加一個View的時候,他們是立即就被顯示出來的,其實實作它們的的動畫效果非常簡單。在這個Hack裡面,我就會給你展示如何在給ViewGroup添加View的時候加上一個動畫效果,在你的程式裡面,隻需要短短的幾行代碼就夠了。
Android提供了一個叫做LayoutAnimationController的類,這個類對于給ViewGroup的child添加動畫效果時很有用。需要提醒的很重要的一點是,你不能給你的children提供不同的動畫效果,但是你可以利用LayoutAnimationController控制每一個child何時開始動畫。
了解LayoutAnimationController的最簡單的方法就是通過一個例子了。我們将會給listview中的每一行添加兩種效果的混合動畫,alpha(漸變)與translate(位移)。我們可以通過兩種方式使用layoutAnimationController:一是在代碼中使用、二是在XML檔案中使用。在這裡将會示範如何在代碼中實作它,在XML中實作就靠你自己了。來看看實作動畫部分的代碼吧:
//擷取ListView
mListView = (ListView) findViewById(R.id.my_listview_id);
//建立AnimationSet并使用預設配置
AnimationSet set = new AnimationSet(true);
//建立一個漸變動畫
Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(50);
set.addAnimation(animation);//添加動畫
//建立一個位移動畫
animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
-1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
animation.setDuration(100);
set.addAnimation(animation);//添加動畫
//建立LayoutAnimationController,并設定動畫之間的延遲
LayoutAnimationController controller = new LayoutAnimationController(
set, 0.5f);
//啟動動畫
mListView.setLayoutAnimation(controller);
下面講解一下:
1、首先你需要擷取ListView。
2、由于我們需要添加不止一個動畫效果,是以我們需要用一個集合(AnimationSet)。
3、這個布爾變量将會決定是否我們的每一個動畫都會使用一個interpolator(插入器)。在這個例子裡面,我們使用預設的interpolator(插入器)來設定漸變及位移效果,并把他們加入AnimationSet裡面。
4、我們使用這個AnimationSet來建立了一個LayoutAnimationController,然後設定了各個View之間動畫的延遲。
5、最後,我們給ListView添加這個LayoutAnimationController,設定動畫效果。
大部分FrameWork提供的動畫都看起來像TranslateAnimation,讓我們來看看這部分代碼,構造函數定義如下:
public TranslateAnimation(int fromXType, float fromXValue, int toXType,
float toXValue, int fromYType, float fromYValue, int toYType,
float toYValue)
這個使用方法很簡單:我們需要提供初始的和動畫之後的xy坐标。Android提供了三種從哪裡開始計算坐标的方法,如下:
- Animation.ABSOLUTE
- Animation.RELATIVE_TO_PARENT
- Animation.RELATIVE_TO_SELF
如果我們回過頭來看看我們隻限的例子,我們就可以解釋那一部分的代碼了:
- 初始X:Parent提供的坐标
- 初始Y:距離Parent提供的坐标距離是-1
- 最終X:由Parent提供的坐标
- 最終Y:由Parent提供的坐标
最終的效果就是每一行好像都是豎直掉落下來的樣子。由于設定了一個延遲,是以看上去就像是級聯一樣的連續。
6.1 總結
給ViewGroup添加動畫非常簡單,他們會讓你的程式看上去非常專業和精美。這個Hack裡僅僅介紹了很小的一部分功能,比如你也可以替換一下預設的interpolator(插入器),如果是BounceInterpolator,看上去就好像是每個child彈跳是彈上去的一樣。而且你也可以設定這些children的動畫的次序。
使用你的想象力來創造一些有趣的東西吧,但是不要亂用它們,過多的使用動畫效果也是不合理的。
6.2 相關連結
http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
轉載請注明原位址,謝謝!
http://blog.csdn.net/kost_/article/details/13776487
代碼下載下傳位址:
http://download.csdn.net/detail/u011418185/6483479