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

时间: 2024-10-09 20:33:23

Android动画(1)——ViewAnimator的相关文章

android动画具体解释六 XML中定义动画

动画View 属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,由于View本身没有要操控的属性.结果就是View被动画了.但View对象本身并没有变化. 在Android3.0中,新的属性和对应的getter和setter方法被增加以克服此缺点. 属性动画系统能够通过改变View对象的真实属性来动画Views. 并且.View也会在其属性改变时自己主动调用invalidate(

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

android 动画(1) 补间动画

android动画: 3.0以前,android支持两种动画模式,tween animation,frame animation, 3.0中又引入了一个新的动画系统:property animation, 这三种动画模式在SDK中被称为 property animation,        属性动画: view animation,   补间动画:  给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变. (Tween animation) drawable animatio

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

Android动画基础

Android动画主要有三种: 1> 视图动画,也叫Tween(补间)动画可以在一个视图容器内执行一系列简单变换(位置.大小.旋转.透明度).譬如,如果你有一个TextView对象,您可以移动.旋转.缩放.透明度设置其文本,当然,如果它有一个背景图像,背景图像会随着文本变化. 补间动画通过XML或Android代码定义,建议使用XML文件定义,因为它更具可读性.可重用性. 2> Drawable动画其实就是Frame动画(帧动画),它允许你实现像播放幻灯片一样的效果,这种动画的实质其实是Dra

Android动画效果——1.帧动画2.补间动画3.跳转画面(三)

Android--动画效果1.帧动画2.补间动画3.跳转画面 插值器类 xml属性值 说明 LinearInterpolator @android:anim/linear_interpolatorr 动画以均匀的速度改变. AccelerateInterpolator @android:anim/accelerate_interpolator 在动画开始时改变速度较慢,然后开始加速. AccelerateDecelerateInterpolator @android:anim/accelerat

Android动画AnimationSet遇到的问题。

之前对Android动画这块一直是一知半解,知道个大概,并不会使用.刚好这几天没有太多的任务要做,可以梳理一下Android动画的一些知识.Android Animation的基础用法就不说了,这里主要记录下简单实用中遇到的问题. 1.XML中AnimationSet的某些属性有些问题. 主要就是android:repeatCount,android:repeatMode无效.这个问题据说是Google的工程师刻意为之.[参考:http://stackoverflow.com/questions

Android 动画详解

这次主要就介绍android动画,android动画目前分为三种形式,Tween Animation 这个只能应用于view对象上面的,Drawable Animation这个是帧动画,就是类似我们有一些列的图片依次播放图片时出现的动画,Property Animation 这个是属性动画,这也是在android3.0之后引进的动画,在手机的版本上是android4.0就可以使用这个动画,下面我们主要就是针对这三种情况进行介绍. Tween Animation 这个动画在Property Ani

【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation  动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 Animatio

Android动画学习(缓动动画与属性动画的区别)

前言: 在 Android动画学习(概述)中,如果你看过这篇帖子,你应该会对缓动动画和属性动画之间的区别产生疑问,因为在它们的应用中,你会感觉这两种动画有着一些相似的地方,为此,我打算把这两种动画之间的区别做一下说明 区别: 在这里先附上官方文档对于这两种动画的区别说明(我所说的缓动动画对应在下文中的英文为:View Animation,属性动画对应在下文中的英文为:Property Animation): How Property Animation Differs from View Ani