View动画的种类
View动画支持四种效果:
1.平移动画
2.缩放动画
3.旋转动画
4.透明度动画
以上四种动画分别对应Animation的四个子类:TranslateAnimation ScaleAniamtion RotateAnimation AlphaAnimation
这四种动画既可以通过xml定义,也可以通过代码来创建。对于View动画来说,建议采用xml来定义动画,因为xml格式的动画可读性更好。
下面说一下用xml来定义四种动画的语法
首先都是
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="0.1" android:toAlpha="1"/> <translate android:duration="400" android:fromXDelta="0" android:toXDelta="100" android:fromYDelta="0" android:toYDelta="100"/> <rotate android:duration="400" android:fromDegrees="0" android:toDegrees="90"/> <scale android:fromXScale="0" android:toXScale="100" android:fromYScale="0" android:toYScale="100" android:pivotX="0" android:pivotY="0"/> </set>其中scale动画中的android:pivotX="0"意思是旋转的轴的X坐标android:pivotX="0"意思是旋转的轴的Y坐标//加载xml的形式 Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_view); btn_animView.startAnimation(animation); 通过代码的形式来应用动画 比如透明度动画如下写法:AlphaAnimation alphaAnimation = new AlphaAnimation(0,1); alphaAnimation.setDuration(300); btn_animView.startAnimation(alphaAnimation); btn_animView.startAnimation(alphaAnimation);
View动画的特殊用途
1.在ViewGroup中可以控制子元素的出场效果 ,用到的类是LayoutAnimation
2.在Activity中可以实现不同Activity之间的切换效果
下面来介绍特殊用途1,这里为GridView添加一个item出现效果,有两种方式
方式一,使用xml的形式定义这个动画
1.先在anim文件夹下面定义一个LayoutAnimation的xml文件,内容如下
<?xml version="1.0" encoding="utf-8"?> <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationOrder="normal" android:animation="@anim/anim_item"/>
这里需要说明的几个属性的意思,delay属性表示开始动画的时间延迟,比如子元素入场动画的时间周期为300ms,那么0.5表示每个子元素都需要延迟150ms才能播放入场动画。总的来说就是子元素1延迟150ms,子元素2就是延迟300ms了。
animationOrder表示子元素动画的顺序,有以下三中选项:
normal:表示顺序显示,即是排在最前面的子元素先开始播放入场动画
reverse:表示逆向显示,跟normal相反。
random: 表示随机播放入场动画
animation就是指定具体的入场动画,这里就是下面要定义的anim_item动画文件
然后建立一个上面文件中的属性animation对应的anim_item的文件,就是GridView每个item出现的具体动画文件
内容是:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:shareInterpolator="true"> <alpha android:fromAlpha="0.0" android:toAlpha="1.0"/> <translate android:fromYDelta="500" android:toYDelta="0"/> </set
最后在GridView中配置LayoutAnimation属性,如下
<GridView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="3" android:stretchMode="columnWidth" android:listSelector="@null" android:horizontalSpacing="1dp" android:verticalSpacing="1dp" android:background="#FFFFFF" android:layoutAnimation="@anim/anim_layout" android:scrollbars="none"/>就这样,利用xml给GridView的item添加出现动画已经完了,这种方式适合所有的ViewGroup,比如ListView。
然后介绍用代码形式,就是以下几句代码
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item); LayoutAnimationController controller = new LayoutAnimationController(animation); controller.setDelay(0.5f); controller.setOrder(LayoutAnimationController.ORDER_NORMAL); gridView.setLayoutAnimation(controller);这种方法主要用到了LayoutAnimationController这个类。
下面介绍View动画的第二种特殊用途,在Activity中可以实现不同Activity之间的切换效果
这里不贴代码了,主要用到的是overridePendingTransition()这个方法,这个方法必须放在startActivity()或者finish()之后才能生效