轉載請保留原文出處「http://my.oschina.net/gluoyer/blog」,謝謝!php
您能夠到博客的「友情連接」中,「程序猿媛(最新下載)*.*」下載最新版本,持續更新!當前版本,也可直接點擊「當前1.4版本」下載。java
本文介紹,經過ViewAnimator動態切換,將自定義標題欄中的功能按鈕,分類、分層次顯示。android
固然,博文闡述的是一種展示模式,請根據實際狀況,靈活應用。ide
首先,看下實現效果:佈局
效果簡述:進入後點擊「設置」,動畫效果向下切入顯示二級欄;點擊「返回」,動畫向上切回主欄。動畫
功能實現,主要如下幾步:this
<ViewAnimator android:id="@+id/title_bar_switcher" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@+id/title_bar_main" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:background="#a0a00aa0"> <Button android:id="@+id/title_bar_switch_sec_tk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/str_title_bar_btn_to_sec_tk" /> <Button android:id="@+id/title_bar_switch_sec_class" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/str_title_bar_btn_to_sec_class" /> <Button android:id="@+id/title_bar_switch_sec_set" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/str_title_bar_btn_to_sec_set" /> </LinearLayout> <include android:id="@+id/title_bar_sec_set" layout="@layout/title_bar_ani_set" /> <include android:id="@+id/title_bar_sec_class" layout="@layout/title_bar_ani_class" /> <include android:id="@+id/title_bar_sec_tk" layout="@layout/title_bar_ani_tk" /> </ViewAnimator>
爲了方便觀看其關係,將二級欄單獨提取出去,經過include包含進來的。.net
經過佈局能夠看出,在ViewAnimator中,能夠直接將各子項放置其中:3d
title_bar_main對應的就是主欄,截圖也能夠看到,它包含「設置」、「分類」「三國」三個按鈕,點擊分別對應顯示下面include的三組佈局。以截圖最後一張顯示爲例:點擊「設置」後,動畫切入顯示title_bar_sec_set對應包含的佈局。code
首先,定義了enum類型,以及該類型的成員變量:
enum TopBarMode {Main, Set, Class, Tk}; private TopBarMode mTopBarMode = TopBarMode.Main;
這樣,咱們就能夠記錄到當前欄所處的狀態了。
切換操做是經過ViewAnimator提供的方法setDisplayedChild(…)實現的。好比,點擊「設置」按鈕進行切換是,就能夠調用以下方法:
private void toSecSet() { if(TopBarMode.Set != mTopBarMode) { // 更新狀態,切換顯示欄 mTopBarMode = TopBarMode.Set; mBarSwitcher.setDisplayedChild(mTopBarMode.ordinal()); // 動畫設置,下一節介紹 mSafeAnimator.startVisibleAnimator(this, mSecSet, R.anim.slide_top_in); mSafeAnimator.startInvisibleAnimator(this, mMain, R.anim.slide_bottom_out); } }
爲了增長切換的效果,一般,咱們都是加入過渡動畫的。
我習慣上是經過xml文件設置動畫,因此,這裏添加了一個SafeAnimator.java文件,也就是前面toSecSet()方法中,mSafeAnimator變量的類型。簡單加入了兩個方法:
主要經過Animation開始視圖的動畫,並設置監聽,在動畫開始和結束階段,設置視圖的可見性; 詳見源碼,不贅述!
OK,That's all! 源碼能夠經過應用,點擊截圖中底部顯示的「關於做者及源碼下載」按鈕獲取,謝謝!
轉載請保留地址出處「http://my.oschina.net/gluoyer/blog/178560」,謝謝!
您能夠到博客的「友情連接」中,「程序猿媛(最新下載)*.*」下載最新版本,持續更新!當前版本,也可直接點擊「當前1.4版本」下載