天天看點

Hack6-為ViewGroup添加動畫效果6.1 總結6.2 相關連結

在預設的情況之下,當你給一個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