Animations的使用 *一套实现动画的API 1.什么是Animations 实现动画效果 2.Animations的分类 1)TweenedAnimations 提供了旋转,移动,伸展,和淡出等等效果 a.Alpha:淡入淡出效果 b.Scale:缩放效果 c.Rotate:旋转效果 d.Translate:移动效果 2)Frame-by-FrameAnimations 创建一个Drawable序列,可以按照时间间歇一个个的显示 3.Animations的使用方法(一)代码实现 1)使用TweenedAnimations的步骤 a.创建一个AnimationSet对象 可以把几个动画对象放在一起 b.根据需要创建相应的Animation对象 c.根据软件的动画的需求,为Animation对象设置相应的数据 d.将Animation对象添加到AnimationSet对象当中 e.使用控件对象开始执行AnimationSet 2)Alpha效果实现(淡入淡出) /**创建一个AnimationSet对象*/ AnimationSet animationSet = new AnimationSet(true); /**创建一个AlphaAnimation对象*/ AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0); /**设置动画执行的时间*/ alphaAnimation.setDuration(1000); /**将AlphaAnimation对象添加到AnimationSet中*/ animationSet.addAnimation(alphaAnimation); /**使用image的方法开始执行动画*/ image.startAnimation(animationSet); 3)Rotate效果实现(旋转效果) 重要的地方就是其构造方法: RotateAnimation rotateAnimation = new RotateAnimation( /**起始角度*/ 0, /**终止角度*/ 360, /**设置旋转的圆心*/ pivotX, pivotY); pivotX,pivotY是设置旋转的圆心 设置有三种方式: a.Animation.ABSOLUTE b.Animation.RELATIVE_TO_SELF 内轴:例如:如果是pivotX为0.5pivotY为0,则圆心的位置就是在图片宽度一半的位置 外轴:例如:如果是pivotX为0.5pivotY为0.5,则圆心的位置就是在图片的几何中心位置 c.Animation.RELATIVE_TO_PARENT 4)translate效果实现(移动效果) 重要的地方就是其构造方法: TranslateAnimation translateAnimation = new TranslateAnimation( /**设置X方向的起始和终止位置*/ Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,0.5f, /**设置Y方向的起始和终止位置*/ Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,1f); 5)Alpha的淡入淡出效果 重要的地方就是其构造方法: /** * 创建AlphaAnimation对象 * 其构造方法是有两个参数 * 1代表的是完全不透明 * 0代表的是完全的透明 * 其方法是表示从完全不透明到完全透明的渐变过程 */ AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0); 6)Scale的缩放效果 重要的地方就是其构造方法: ScaleAnimation scaleAnimation = new ScaleAnimation( /**横纵坐标变到以前的0.1*/ 1,0.1f,1,0.1f, /**设置缩放的旋转轴*/ Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.8f); 4.Animation的通用属性 这里设置的animationSet的通用属性 /**设置动画执行的时间*/ animationSet.setDuration(1000); /**动画执行完毕后,停留在控件结束的状态*/ animationSet.setFillAfter(true); /**动画执行完毕后,停留在控件开始的状态*/ animationSet.setFillBefore(false); /**设置动画执行之前的等待时间*/ animationSet.setStartOffset(2000); /**设置动画的重复执行次数*/ animationSet.setRepeatCount(3); 5.Animation的使用(二)xml实现 使用步骤: a.在res文件夹下创建一个名为anim的文件夹 b.创建xml文件,并首先加入set标签,该标签为 <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> </set> c.在标签中加入rotate alpha scale translate的配置文件 d.在代码中使用AnimationUtils中装载xml文件,并生成Animation对象 核心实现代码: Animation animation = AnimationUtils.loadAnimation (MainActivity.this, R.anim.scale); image.startAnimation(animation); 分别实现的xml文件如下: 1)Rotate的xml布局: <rotate /**变换角度*/ android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotX="50%" android:duration="3000" /> 2) Alpha的xml布局 <alpha android:fromAlpha="1" android:toAlpha="0" android:startOffset="500" android:duration="500" /> 3)Scale的xml布局 <scale android:fromXScale="1" android:toXScale="0" android:fromYScale="1" android:toYScale="0" android:pivotX="50%" android:pivotY="50%" android:duration="3000" /> 4)Translate的xml布局实现 <translate android:fromXDelta="50%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="100%" android:duration="2000" /> 注意:属性android:pivotX的值共有三种设置方法 a.android:pivotX="50"使用绝对位置定义 b.android:pivotX="50%"相对于控件本身定位 c.android:pivotX="50%p"相对于父控件定位 6.Animation的使用(三) 1)AnimationSet的使用方法 AnimationSet继承了Animation,包含一系列的Animation对象 2)Interpolator的使用方法 定义了动画变换速率 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" /**逐渐加速*/ android:interpolator="@android:anim/accelerate_interpolator" /**如果此处是true下面动画都按这个速率*/ /**如果此处是false下面动画都需要分别设置*/ android:shareInterpolator="true"> <translate android:fromXDelta="50%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="100%" android:duration="2000" android:interpolator="@android:anim/linear_interpolator" /> <alpha android:fromAlpha="1" android:toAlpha="0" android:startOffset="500" android:duration="500" android:interpolator="@android:anim/accelerate_interpolator" /> <scale android:fromXScale="1" android:toXScale="0" android:fromYScale="1" android:toYScale="0" android:pivotX="50%" android:pivotY="50%" android:duration="2000" android:interpolator="@android:anim/cycle_interpolator" /> <rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:duration="3000" android:interpolator="@android:anim/accelerate_decelerate_interpolator" /> </set> 速率变换的分类: a.AccelerateDecelerateInterpolator在开始和结束时 速率改变比较慢,在中间的时候加速 b.AccelerateInterpolator在开始时速率改变比较慢,在中间的时候加速 c.CycleInterpolator动画循环播放特定的才次数,速率沿着正弦曲线 d.DecelerateInterpolator在动画开始的地方变换比较慢,然后开始 减速 e.LinearInterpolator动画以均匀的速率改变 在xml可以配置的速率属性: accelerate_decelerate_interpolator 加速-减速动画 accelerate_interpolator 加速-动画 decelerate_interpolator 减速- 动画 3)Frame-By-Frame Animations的使用方法 核心代码: /**为图片设置资源*/ image.setBackgroundResource(R.drawable.anim_ghost); /**得到动画*/ AnimationDrawable animationDrawable = (AnimationDrawable)image.getBackground(); /**开始执行动画*/ animationDrawable.start(); xml配置: 在res/drawable下建立一个xml文件 比如我们叫anim_ghost.xml <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" androidneshot="false"> <item android:drawable="@drawable/g1" android:duration="1000" /> <item android:drawable="@drawable/g2" android:duration="1000" /> </animation-list> 7.Animation高级使用 LayoutAnimationController,为Layout中的控件, 或者是一个ViewGroup控件设置动画效果 1)ListView与Animation结合使用 步骤: a.在res/anim当中创建一个新文件,名为 list_anim_layout.xml文件 为整个layout设置动画效果 <layoutAnimation xmlns:android="http://schema.android.com/apk/res/android" android:delay="5" android:animationOrder="random" android:animation="@anim/list_anim"/> b.设置一个动画文件 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%p" android:pivotY="50%p" android:duration="3000" /> </set> c.在布局文件中为ListView添加如下配置 android:layoutAnimation="@anim/list_anim_layout" 2)LayoutAnimationController的使用 a.创建一个Animation对象 加载xml文件的方式,或者直接使用Animation进行new b.创建LayoutAnimationController对象 LayoutAnimationController lac = new LayoutAnimationController(animation) c.设置控件显示的顺序 lac.setOrder(LayoutAnimationController.ORDER_NORMAL) d.为ListView设置LyaoutAnimationController属性 listView.setLayoutAnimation(lac); 3)AnimationListener的使用方法 主要包含三个方法: /**动画效果结束时调用*/ a.onAnimationEnd(Animation animation) /**动画效果重复时调用*/ b.onAnimationRepeat(Animation animation) /**动画开始时调用*/ c.onAnimationStart(Animation animation) 主要是添加控件和删除控件的实现 |