ViewSwitcher学习笔记

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

已知直接子类

ImageSwitcherTextSwitcher


 

  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();//当登陆失败

相关文章
相关标签/搜索