Android 动画(一)---布局动画
LayoutAnimation 可以用來(lái)為ViewGroup添加動(dòng)畫(huà),并按照預(yù)定的順序把一個(gè)動(dòng)畫(huà)(或者動(dòng)畫(huà)集合)應(yīng)用到ViewGroup的第一個(gè)子View 中。
可以使用LayoutAnimationController 來(lái)指定一個(gè)應(yīng)用到View組中的每一個(gè)動(dòng)畫(huà)(或動(dòng)畫(huà)集合)。ViewGroup中包含的每一個(gè)View都將應(yīng)用到這個(gè)相同的動(dòng)畫(huà),但可以使用LayoutAnimationController來(lái)指定每一個(gè)View的順序和起始時(shí)間。
1、創(chuàng)建布局動(dòng)畫(huà)
要?jiǎng)?chuàng)建一個(gè)新的布局動(dòng)畫(huà),首先要定義一個(gè)將應(yīng)用于每個(gè)子View的動(dòng)畫(huà),然后,在代碼中或者作為外部動(dòng)畫(huà)資源,創(chuàng)建一個(gè)新的LayoutAnimation,它引用了要應(yīng)用的動(dòng)畫(huà)并定義了應(yīng)用它的順序和時(shí)刻安排。
1.1、定義一個(gè)將應(yīng)用于每個(gè)子View的動(dòng)畫(huà) popin.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_interpolator"><scaleandroid:duration="2000"android:fromXScale="0.0"android:fromYScale="0.0"android:pivotX="50%"android:pivotY="50%"android:toXScale="1.0"android:toYScale="1.0" /></set>
1.2、定義一個(gè)LayoutAnimation ? popinlayout.xml
<?xml version="1.0" encoding="utf-8"?> <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"android:delay="0.5"android:animationOrder="reverse"android:animation="@anim/popin"></layoutAnimation>
其中:
android:animationOrder="reverse"指定ViewGroup中的每一個(gè)子View應(yīng)用動(dòng)畫(huà)的順序,這里指定為“逆序”;
android:animation="@anim/popin"指定要在每一個(gè)View中的應(yīng)用的動(dòng)畫(huà),這里為1.1中的定義的動(dòng)畫(huà)資源;
2、使用布局動(dòng)畫(huà)
一旦定義了一個(gè)布局動(dòng)畫(huà),就可以使用代碼或者布局XML 資源將其應(yīng)用到一個(gè)ViewGroup中。
2.1、在XML中使用,通過(guò)在布局定義中使用android:layoutAnimation="@anim/popinlayout"來(lái)完成
如下為 LinearLayout應(yīng)用上述布局動(dòng)畫(huà)
<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:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity"android:layoutAnimation="@anim/popinlayout"><Buttonandroid:id="@+id/start_anim_bt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/start_anim_bt_txt"/><TextViewandroid:id="@+id/info_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><ImageViewandroid:id="@+id/img_iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/image2"/></LinearLayout>
2.2、在代碼中設(shè)置一個(gè)布局動(dòng)畫(huà),可以調(diào)用ViewGroup的setLayoutAnimation,并給它傳遞所希望應(yīng)用到的LayoutAnimation對(duì)象的引用。
通常情況下,布局動(dòng)畫(huà)會(huì)在ViewGroup第一次進(jìn)行布局的時(shí)候執(zhí)行一次。可以通過(guò)對(duì)ViewGroup調(diào)用scheduleLayoutAnimation來(lái)強(qiáng)制它再次執(zhí)行,然后當(dāng)ViewGroup下次被布局的時(shí)候,這個(gè)動(dòng)畫(huà)就會(huì)再次執(zhí)行。
布局動(dòng)畫(huà)也支持動(dòng)畫(huà)監(jiān)聽(tīng)器。
<span style="white-space:pre"> </span>//得到要應(yīng)用動(dòng)畫(huà)的ViewGrouplinearlayout_vg=(LinearLayout)findViewById(R.id.linearlayout_vg);//得到在res/anim/popin.xml文件中定義的動(dòng)畫(huà)資源Animation myAnimation= AnimationUtils.loadAnimation(MainActivity.this, R.anim.popin);LayoutAnimationController layoutAnimationController=new LayoutAnimationController(myAnimation);layoutAnimationController.setDelay(0.5f);//設(shè)置ViewGroup中每一個(gè)子View應(yīng)用動(dòng)畫(huà)的順序layoutAnimationController.setOrder(LayoutAnimationController.ORDER_REVERSE);//布局動(dòng)畫(huà)也支持動(dòng)畫(huà)監(jiān)聽(tīng)器linearlayout_vg.setLayoutAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {Toast.makeText(MainActivity.this,"動(dòng)畫(huà)開(kāi)始了。。。",Toast.LENGTH_SHORT).show();}@Overridepublic void onAnimationEnd(Animation animation) {Toast.makeText(MainActivity.this,"動(dòng)畫(huà)結(jié)束了。。。",Toast.LENGTH_SHORT).show();}@Overridepublic void onAnimationRepeat(Animation animation) {Toast.makeText(MainActivity.this,"動(dòng)畫(huà)重復(fù)執(zhí)行了。。。",Toast.LENGTH_SHORT).show();}});//當(dāng)ViewGroup被布局的時(shí)候,強(qiáng)制該動(dòng)畫(huà)再次執(zhí)行l(wèi)inearlayout_vg.scheduleLayoutAnimation();//在ViewGroup中應(yīng)用布局動(dòng)畫(huà)linearlayout_vg.setLayoutAnimation(layoutAnimationController);
總結(jié)
以上是生活随笔為你收集整理的Android 动画(一)---布局动画的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android---自定义Toast
- 下一篇: Android 动画(四)---逐帧动画