ViewSwitcher 的做用簡單來講就是:在兩個視圖間轉換時顯示動畫 java
它的兩個子類應該很熟悉,ImageSwitcher:轉換圖片時增長動畫效果; TextSwitcher: 轉換文字時增長動畫效果; android
API翻譯 函數
1、結構 佈局
public class ViewSwitcher extends ViewAnimator 動畫
java.lang.Object spa
android.view.View 翻譯
android.view.ViewGroup xml
android.widget.FrameLayout 對象
android.widget.ViewAnimator 索引
android.widget.ViewSwitcher
已知直接子類
2、概述
在兩個視圖間轉換時顯示動畫,有一個能夠建立這些視圖的工廠類。你能夠用工廠來建立這些視圖,也能夠本身建立。一個ViewSwitcher只容許包含兩個子視圖,且一次僅能顯示一個。
(譯者注:與ViewFlipper類類似,但該類不經常使用,經常使用其兩個子類ImageSwitcher:轉換圖片時增長動畫效果; TextSwitcher:轉換文字時增長動畫效果)
3、內部類
interface ViewSwitcher.ViewFactory
在一個ViewSwitcher裏建立視圖
4、構造函數
public ViewSwitcher (Context context)
構造一個新的空的視圖轉換器(ViewSwitcher)。
參數context 上下文
public ViewSwitcher (Context context, AttributeSet attrs)
構造一個指定上下文、屬性集合的空的視圖轉換器(ViewSwitcher)。
參數
context 上下文
attrs 屬性集合
5、公共方法
public void addView(View child, int index, ViewGroup.LayoutParams params)
添加一個指定佈局參數的子視圖
參數
child 添加的子視圖
index 添加的子視圖的索引
params 子視圖的佈局參數
異常
IllegalStateException 若是切換器中已經包含了兩個視圖時。
public View getNextView ()
返回下一個要顯示的視圖
返回值——視圖切換以後將要顯示出的下一個視圖
public void reset ()
重置視圖轉換器(ViewSwitcher)來隱藏全部存在的視圖,並使轉換器達到一次動畫都尚未播放的狀態。
public void setFactory (ViewSwitcher.ViewFactory factory)
設置用來生成將在視圖轉換器中切換的兩個視圖的工廠。也能夠調用兩次 addView(android.view.View, int, android.view.ViewGroup.LayoutParams)來替代使用工廠的方法。
參數 factory 用來生成轉換器內容的視圖工廠
下面利用OSChina開源代碼中的一部分來演示它的具體使用
「用戶登陸」
佈局xml:
<ViewSwitcher
android:id="@+id/logindialog_view_switcher"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<RelativeLayout
佈局。。。。
/>
<View
android:id="@+id/login_loading"
android:layout_width="135.0dip"
android:layout_height="135.0dip"
android:layout_gravity="center"
android:background="@anim/login_loading"/>
</ViewSwitcher>
動畫類中:
01 動畫1 11 動畫2
用到圖層疊加(由於這裏有兩個動畫效果)
<!-- 動畫幀集合對象-->
<?xml version="1.0" encoding="UTF-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!--動畫幀對象 android:duration表示每幀動畫顯示的時間,放在drawable下的動畫圖片不能太大,不然會內存爆掉-->
<item android:duration="100">
<layer-list>
<item android:drawable="@drawable/login_loading_00" />
<item android:drawable="@drawable/login_loading_10" />
</layer-list>
</item>
<item android:duration="100">
<layer-list>
<item android:drawable="@drawable/login_loading_01" />
<item android:drawable="@drawable/login_loading_11" />
</layer-list>
</item>
<item android:duration="100">
<layer-list>
<item android:drawable="@drawable/login_loading_02" />
<item android:drawable="@drawable/login_loading_12" />
</layer-list>
</item>
</animation-list>
實體類中
初始化
private ViewSwitcher mViewSwitcher;
private View loginLoading;
loginLoading = (View)findViewById(R.id.login_loading);
mViewSwitcher = (ViewSwitcher)findViewById(R.id.logindialog_view_switcher);
loadingAnimation = (AnimationDrawable)loginLoading.getBackground();
loadingAnimation.start();
mViewSwitcher.showNext();//當登陸成功
mViewSwitcher.showPrevious();//當登陸失敗