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