标签:
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并不常用,我们更通常使用到的是实现特定功能的它的子类:

标签:
原文地址:http://www.cnblogs.com/fordreamxin/p/4504771.html