Android动画(1)——ViewAnimator

ViewAnimator是一个ViewGroup视图容器,它的父类是FrameLayout。因此简单的来讲它的布局方式同FrameLayout,但是能对它的子视图的进入和隐藏用动画实现。

作用:动画实现一些简单的分层视图。

它的XML实现如下:

    <ViewAnimator
        android:id="@+id/viewAni"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:inAnimation="@android:anim/slide_in_left"
        android:outAnimation="@android:anim/slide_out_right" >

        <TextView
            android:id="@+id/firstFrame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/holo_blue_light"
            android:text="@string/frame1" 
            android:gravity="center"/>

        <TextView
            android:id="@+id/secondFrame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/holo_green_light"
            android:text="@string/frame2" 
            android:gravity="center"
        android:visibility="gone"
    /> </ViewAnimator>

 它的布局方式同FrameLayout,不同点是设置子视图消失和隐藏的动画属性:

android:inAnimation

android:outAnimation

这两个xml属性对应的代码函数是:

public void setInAnimation(Context context, int resourceID)

public void setOutAnimation(Context context, int resourceID)

 

FrameLayout是通过设置子视图的Visibility属性来控制子视图的显示和隐藏,而ViewAnimator则只能通过下面三个函数控制子视图的显示和隐藏:

public void showNext():显示下一个视图。调用该函数时,当前子视图通过outAnimation隐藏,下一个子视图通过inAnimation显示。

public void showPrevious():显示前一个视图。调用该函数时,当前子视图通过outAnimation隐藏,前一个子视图通过inAnimation显示。

public void setDisplayedChild(int whichChild):显示指定的子视图。调用该函数时,当前子视图通过outAnimation隐藏,指定的子视图通过inAnimation显示。

previous和next由子视图添加到ViewAnimator中的顺序决定,whichChild的取值区间为[0, getChildCount()]。getChildCount()为ViewAnimator的所有子视图的数量。

除此之外,在代码中添加和移除子视图的函数addView和removeView也是通过动画进行的。

 

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_view_animator_example);
		firstFrame = this.findViewById(R.id.firstFrame);
		secondFrame = this.findViewById(R.id.secondFrame);
		mViewAni = (ViewAnimator)this.findViewById(R.id.viewAni);
		mSwitchBtn = (Button)this.findViewById(R.id.switchBtn);
		mSwitchBtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				if(firstShow){
					mViewAni.showPrevious();
					firstShow = !firstShow;
				}else{
					mViewAni.showNext();
					firstShow = !firstShow;
				}
			}
		});
		
	}

 

ViewAnimator并不常用,我们更通常使用到的是实现特定功能的它的子类:

posted on 2015-05-14 23:10  Matrixin  阅读(1402)  评论(0编辑  收藏  举报

导航