《》android.widget.ViewSwitcher是ViewAnimator的子类,使用这个类为的是能够在进行两个试图之间进行切换的时候使用动画

《》为了能够在进行两个View切换的时候使用Android自定义的动画或者自定义的XML动画文件,我们需要将这两个View类型的试图添加到ViewSwitcher对象中,之后再为ViewSwitcher对象设定动画显示效果,之后就能够进行动画切图了,非常的简单,需要注意的是这个ViewSwitcher中仅仅能够添加两个View,不能够添加多个View视图,否则就会报错

《》使用ViewSwitcher的步骤如下:

①创建ViewSwitcher对象:

创建ViewSwitcher对象的方法有两种,一种是在XML布局文件中添加<ViewSwitcher>标签,另一种方法是在java代码中动态创建ViewSwitcher对象

②为ViewSwitcher添加两个View类型的视图对象:

需要注意的“View类型的视图对象”可以是任何继承了View的组件对象,当然也可以是通过inflate()方法转化成View类型的XML布局文件;

添加View组件的方法有三种:

1.如果在第一步中使用的ViewSwitcher标签的话,那么就能够在<ViewSwitcher></ViewSwitcher>之间直接添加View类型的组件,如:

 

<ViewSwitcher
        android:id="@+id/viewSwitcher"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
android:text="you are right"/>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"> 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
android:text="nononono"/>
       <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="yesyesyyesyeys"/>
</LinearLayout>
</ViewSwitcher>

需要注意的是只能够添加两个View类型的组件

2.添加View组件的第二种方法是,直接在java代码中通过调用ViewSwitcher的addView()方法

将指定的View类型的组件对象添加到ViewSwitcher之中即可,注意只能够调用两次addView()

3.添加View组件的第三种方法是通过调用ViewSwitcher类中的

setFactory(ViewFactory viewFactory)方法来添加,方法如下:

ViewSwitcher switcher = (ViewSwitcher)findViewById(R.id.viewSwitcher);
switcher.setFactory(new ViewFactory()
         {
              @Override
              public View makeView()
              {
            //inflater是一个LayoutInflater类型的对象,这条语句将一个XML文
           //件转换成了一个View 组件,并返回
                   return inflater.inflate(R.layout.slidelistview, null);
              }
         });

上面的语句非常的明白,实际上就是重写ViewFactory类中的makeView()方法,返回的View对象就作为添加到switcher中的View组件,

而且,返回的这个View组件会“形成两份”作为两个相同的View对象添加到ViewSwitcher对象中;

那么我们就会有这样一个问题,我们如何操作添加进去的两个View对象呢?

非常的简单,在ViewSwitcher中提供了一个方法

public View getNextView();

这个方法返回的是ViewSwitcher在下一次显示的View对象,

(程序开始时,ViewSwitcher默认显示的是,第一个加载的View组件),

由于总共就有两个View对象,因此,这两个View组件并没有逻辑上的第一屏和第二屏之分,

所以当前没有显示的那个View组件对于正在显示的那个组件就是“NextView”了,故而在显示下一屏前,

我们就可以通过使用getNextView()方法返回未显示View组件,再通过View类的findViewBy来找回View对象中的子组件,并重新设定他们。

但是,你可能会说:既然ViewSwitcher默认在开始时就显示第一个加载的View,但是我们第一次调用getNextView()方法返回的只能是第二个加载的View组件,

呢么这样一来第一个View组件显示在第一屏时,岂不是没办法动态操作他了?

实际上,就像前面的所说的,加载的两个View组件,并没有先后性,我们既然可以将第一个加载View组件作为第一屏显示的内容,

那么也就是说,我们照样可以将第二个加载的View组件作为第一屏显示,所以我们可以这样:一开始就调用getNextView()方法,

设定第二个加载的View组件,之后在调用ViewSwitcher的showNext()方法,这样程序第一屏(或第一次)真正显示的就是是我们设定的第二个加载的组件了。

③为ViewSwitcher设定动画

ViewSwitcher类中有两个方法,分别是

setInAnimation(Context
setOutAnimation(Context

context设为this即可,resourceID既可以是自定义的XML动画文件的ID,也可以是android中已经定义好的XML动画文件的ID,这些文件的ID在android.R.anim中

④切换显示两个View

ViewSwitcher继承了父类android.widget.ViewAnimator中的两个方法

showNext()和showPrev()两个方法,但是我们知道两个View没有逻辑上的先后性,是相对的,

其中一个View的Next和Prev都是另一个View对象,因此,实际来说使用上面的那个方法来切换到下一屏,都没有关系

⑤此外ViewSwitcher还有两个直接子类:imageSwitcher和TextSwitcher,

分别是为了将动画添加到ImageView和TextView的切换当中,也就是说,实际上ViewSwitcher可以为任何View试图的切换中添加动画,是通用的