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

  • 相关阅读:
    设计模式之里氏替换原则
    设计模式之依赖倒转原则
    设计模式之接口分离原则
    spring 集成 kafka producer(KafkaTemplate)
    jmeter 分布式
    ant+Jenkins+jmeter
    pycharm+git+github项目上传
    Python_pip下载不下来源解决方案
    linux_python3环境搭建
    Jenkins+Git+Github+Python自动化化接口项目例子
  • 原文地址:https://www.cnblogs.com/fordreamxin/p/4504771.html
Copyright © 2020-2023  润新知