`

Animation

阅读更多
转自:http://hi.baidu.com/wendaoeryu/item/203d40efbf86583f5a7cfbcf
Android—Animation
一.Animation简介
1.简介  Animation为Android提供了一系列的动画效果:旋转、缩放、移动、淡入淡出,这些动画效果可以应用于绝大多数控件。
2.分类
Animation可分为两类:
    TweenedAnimations:渐变动画,具体就是旋转、缩放、移动、淡入淡出效果。
    Frame-by-FrameAnimations:将一系列Drawable序列一次播放,类似于电影模式,常用来进行定时更新背景等操作。
3.实现方法
Animation有两种实现方法:
    在xml文件中实现,优点是复用性好,可维护性好,多个控件可以使用同一个xml文件。缺点是由于xml文件不进行编译,所以排错比较难。
    在代码中实现,优点是排错很方便,缺点是重复代码多,可复用性低。
二.TweenedAnimations
1.效果
      Alpha:淡入淡出
      Scale:缩放
      Rotate:旋转
      Translate:移动
2.实现
在代码中实现
(1)创建AnimationSet对象(可以柔和多个动画效果)
      AnimationSet是Animation的子类,一个AnimationSet包含了一系列的Animation,对AnimationSet属性的设置将会应用于其中的每一个Animation。
      AnimationSet animationSet=new AnimationSet(true);
(2)根据需要创建相应的Animation对象(根据4种效果有4个子类)
淡入淡出: AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);    //两个参数分别表示初始透明度和目标透明度,
                                                                                                                        //1表示不透明,0表示完全透明。
旋转:RotateAnimation rotateAnimation=new RotateAnimation(0,360,Animation.RELATIVE_TO_PARENT,1f,Animation.RELATIVE_TO_PARENT,1f);
参数含义:
参数1:初始角度,0表示图片当前位置。
参数2:目标角度。
参数3、4、5、6定义了旋转的圆心
参数3:X坐标的类型,有三种默认值:RELATIVE_TO_PARENT 相对于父控件
                                                            RELATIVE_TO_SELF 相对于符自己
                                                            RELATIVE_TO_ABSOLUTE 绝对坐标
参数4:X轴偏移比例,变化范围是0f—1f
参数5:Y坐标的类型,同样也有三种默认值
参数6:Y轴偏移比例,变化范围是0f—1f
缩放:ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.1f,1,0.1f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
参数含义:
参数1,2:X轴缩放比例—从1缩放到0.1
参数3,4:Y轴缩放比例—从1缩放到0.1
参数5,6:X轴轴心点(类型和比例)
参数7,8:Y轴轴心点(类型和比例)
移动:TranslateAnimation translateAnimation=new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f);
参数含义:
参数1,2:X轴的开始位置
参数3,4:X轴的结束位置
参数5,6:Y轴的开始位置
参数7,8:Y轴的结束位置
(3)为Animation配置数据
      这里说明一下TweenedAnimations的几个通用属性
            .setDuration(long durationMills);  //动画执行的时间,单位是毫秒。
            .setFillAfter(boolean fillAfter);  //设为true,则动画完成后停留在结束状态
            .setFillBefore(boolean fillBefore);  //设为true,则动画完成后停留在初始状态
            .setStartOffset(long startOffset);  //动画执行前的等待时间
            .setRepeatCount(int repeatCount);  //动画执行重复的次数
(4)将Animation对象加入AnimationSet中
      animationSet.addAnimation(alphaAnimation);
(5)使用控件对象开始执行AnimationSet
      ***.StartAnimation(animationSet);
在xml中实现
(1)在res目录下新建anim文件夹
(2)在anim中创建xml文件,并首先加入set标签:
<set xmlns:android=“http://schemas.android.com/apk/res/android”
                  android:interpolator="@android:anim/accelerate_interpolator">
</set>
(3)在set标签中可加入rotate、alpha、scale或translate等标签。
例:
   <rotate
              android:fromDegrees="0"       //起始角度
              android:toDegrees="360"      //目的角度,这里的角度可以写负数,这时会逆时针旋转
              android:pivotX="%50"            //X轴的旋转圆心,50,则对应RELATIVE_TO_ABSOLUTE ,50%,则对
                                                            //应 RELATIVE_TO_SELF ,50%p,则对应RELATIVE_TO_PARENT 。
              android:pivotY="%50"           //Y轴的旋转圆心
    >
        这些标签的具体使用可以查阅Android帮助文档。
(4)在代码中使用AnimationUtils装载xml,并生成Animation对象
      Animation animation=AnimationUtils.loadAnimation(MainActivity.this,R.anim.***);    //装载指定的xml文件
3.关于Interpolator
(1)简介
      Interpolator定义了动画的速率,几种默认的Interpolator如下:
      AccelerateInterpolator:动画开始时比较慢,然后逐渐加速。
      DecelerateInterpolator:动画开始时比较快,然后逐渐减速。
      AccelerateDecelerateInterpolator:动画开始时和结束时比较慢,中间过程加速。
      LinearInterpolator:动画匀速进行。
      CycleInterpolator:动画循环播放指定次数,速率沿着正弦曲线改变。
(2)实现
定义在代码中:
      AnimationSet  animationSet =new AnimationSet (true);      //这里设置为true,则为animationSet 设置的Interpolator将
                                                                                                 //应用于animationSet 中的所有animation对象。
      animationSet .setInterpolator(new AccelerateInterpolator);//为animationSet 设置Interpolator。
或者:
      AnimationSet  animationSet =new AnimationSet (false);     
      animation1 .setInterpolator(new AccelerateInterpolator);
      animation2.setInterpolator(new AccelerateInterpolator);
      ......          //为每一个animation对象设置Interpolator。
定义在xml中:
在set标签中添加属性,
       android:shareInterpolator="true"      //设置为true,则这时设置的Interpolator适用于标签中的所有动画。
       android:interpolator="@android:anim/accelerate_interpolator”   //为set设置Interpolator。
或者:
       android:shareInterpolator="false"     //设置为false,则需为每一个动画添加interpolator属性。
三.Frame-By-FrameAnimations
1.实现
(1)在drawable文件夹下创建xml文件:
      <?xml version="1.0" encoding="utf-8"?>
      <animation-list xmlms:android="http://schemas.android.com/apk/res/android"
                                       android:onshot="false">
      <item android:drawable=""@drawable/pic1 android:duration="500" />
      <item android:drawable=""@drawable/pic2android:duration="500" />
      <item android:drawable=""@drawable/pic3android:duration="500" />
    </animation-list>
    
这个文件就定义了需要一次播放的图片资源,每一个<item>就是一个资源,drawable属性就是资源图片,duration指的是播放的时长。
(2) 代码中添加:
      imageView.setBackgroundResource(R.drawable.***);  //将创建的的xml装载进imageView
      AnimationDrawable animationDrawable=(AnimationDrawable)imageView.getBackground();
      animationDrawable.start();    //启动动画
四.LayoutAnimaionController
1.简介
      LayoutAnimaionController为Layout或者viewGroup里的控件设置动画效果,特点是它会使其中的每个控件都有相同的动画效果,这些控件的动画效果可以在不同的时间显示出来。
2.实现(结合ListView使用)
      LayoutAnimaionController同样即可以在代码中设置,也可以在xml中设置。
在代码中:
(1)创建Animation对象,使用构造函数或者装载xml都可以。
(2)创建LayoutAnimaionController对象
      LayoutAnimaionController lac=new LayoutAnimaionController(animation);
(3)设置属性
      lac.setOrder(LayoutAnimaionController .ORDER_NORMAL);//设置顺序
      有三种默认顺序:
            LayoutAnimaionController .ORDER_NORMAL       // 顺序
            LayoutAnimaionController .ORDER_REVERSE     //反序
            LayoutAnimaionController .ORDER_RANDOM      //随机
      lac.setDelay(***f);//设置执行动画的延迟时间,即时间间隔,单位是秒
(4)为ListView设置
      listView.setLayoutAnimation(lac);
在xml文件中:
(1)在res/anim文件夹中创建xml文件
      <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android“
                                            android:delay="0.5"                                                      //执行动画的延迟时间,即时间间隔,单位是秒
                                            android:animationOrder="random"/"normal"/"reverse"  //执行顺序
                                            android:animation="@anim/***"                                      //这是装载具体动画的xml文件
(2)在具体的布局文件中配置属性
      android:layoutAnimation="@anim/***"  
五.AnimationListener
1.简介
      AnimationListener是一个监听器,它在动画执行的各个阶段会得到通知,并且调用相应的方法
2.方法
(1)onAnimationStart(Animation animation)    在动画开始的时候调用
(2)onAnimationEnd(Animation animation)     在动画结束的时候调用
(3)onAnimationRepeate(Animation animation)    在动画重复的时候调用
3.实现
(1)构造监听器
      private class MyAnimationListener implements AnimationListener{
                       ......在其中覆写三种方法
        }
(2)使用
      animation.setAnimationListener(new MyAnimationListener());
分享到:
评论

相关推荐

    微信小程序实现animation动画

    微信小程序实现animation动画,具体内容如下 1. 创建动画实例 wx.createAnimation(OBJECT) 创建一个动画实例animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的...

    Animation-Instancing-master高性能大规模动画解决方案

    我们经常利用GPU Instancing 去实现室外场景,比如草地和树木。但是对于SkinnedMeshRenderer,例如角色...Animation Instancing是一种大大减少CPU消耗并且对GPU Instancing的一种补充 查看效果用 Crowd Simulation 场景

    Core Animation动画例子

    Core Animation是iOS开发中用于创建丰富视觉效果的关键技术,它为开发者提供了强大的工具来实现平滑、高性能的2D和3D图形动画。这个“Core Animation动画例子”压缩包很可能是包含了一些示例代码,帮助开发者理解...

    android动画例子:tween animation and property animation

    本文将深入探讨两种主要的Android动画类型:Tween Animation(平滑动画)和Property Animation(属性动画)。这两种技术都能为应用程序带来生动和交互性的效果,但它们的工作原理和应用场景有所不同。 **Tween ...

    AnimationInstancing群体渲染

    在Unity引擎中,动画实例化(Animation Instancing)是一种优化技术,特别适用于处理大量游戏角色同时出现的场景,如大规模战斗或人群模拟。这种技术能够显著提高游戏性能,降低Draw Call,减少GPU负担,从而实现流畅...

    animation图片移动效果

    在Android开发中,动画(Animation)是提升用户体验的重要手段之一,尤其在用户界面设计中,动画效果能够增加应用的互动性和吸引力。本话题主要聚焦于"图片移动效果",这通常涉及到Android中的视图动画(View ...

    css3 animation酷炫的文字动画特效

    在本文中,我们将深入探讨如何使用CSS3 Animation创建酷炫的文字动画特效。CSS3 Animation是现代网页设计中不可或缺的一部分,它允许我们为元素添加平滑、动态的效果,从而提升用户体验和视觉吸引力。在这个主题中,...

    SurfaceView中添加Animation

    本文将深入探讨如何在SurfaceView中添加Animation,以实现丰富的视觉效果。 首先,我们要了解SurfaceView的工作原理。SurfaceView包含一个独立的Surface对象,它在应用程序主线程之外运行,有自己的渲染线程。这样...

    Animation动画详解 - v1.0

    • 1、《Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法》 • 2、《Animation动画详解(二)——Interpolator插值器》 • 3、《Animation动画详解(三)—— 代码生成alpha、...

    C# 缓动动画类库(c# Easing animation) 及winform使用示例

    C# 缓动动画类库(c# Easing animation) 及winform使用示例 文章详见: https://blog.csdn.net/surfsky/article/details/139511866 var ani = new Animator() .AddPath(AnimationType.ExponentialEaseOut, 100, 300...

    CSS3-animation(动画)_Animation_css_

    2. **animation 属性**: 用于应用动画,它是一个复合属性,包括多个子属性,如 animation-name、animation-duration、animation-timing-function 等。例如: ```css element { animation-name: example; ...

    一种使用Unity Animation的简单动画混合

    本主题将深入探讨如何使用Unity的Animation组件实现一种简单的动画混合技术,特别是在描述中提到的,通过外部输入的索引值(index)来实现动画之间的平滑过渡。 首先,我们需要了解Unity中的Animation系统。Unity提供...

    RPG Character Mecanim Animation Pack

    RPG Character Mecanim Animation Pack 最新版本收錄超過 1000 個專業動作,版本更新速度快,持續加入新的動作,提供物理基礎的控制腳本,並且支援 XBox360 控制器,您可以直接拖曳到遊戲專案使用。 RPG Character ...

    iphone用Animation实现动画效果

    在本教程中,我们将深入探讨如何使用`UIView`的`animation`方法来创建简单的上、中、下移动动画效果。这涉及到iOS开发中的基本动画原理,以及如何通过代码控制视图的行为。 首先,我们要理解`UIView`动画的基本概念...

    使用animation翻页动画效果

    `animation`属性由多个子属性组成,包括`animation-name`、`animation-duration`、`animation-timing-function`、`animation-delay`、`animation-iteration-count`、`animation-direction`、`animation-fill-mode`和...

    微信小程序—this.animate动画和wx.createAnimation动画示例-AnimCss.rar

    `wx.createAnimation` 创建了一个动画对象,开发者可以通过调用该对象上的各种方法来设置动画效果,然后通过`animation.translate`等方式将动画对象赋值给组件的`animation`属性来执行动画。 ```javascript let ...

    wpf Animation动画效果演示,包含多个实例

    WPF Animation是微软.NET Framework的一部分,它为开发者提供了丰富的视觉表现手法,可以实现平滑、动态和交互式的用户界面。 一、WPF Animation基础 WPF动画系统基于故事板(Storyboard),它允许开发者创建时间线...

    Animation GIF ActiveX 2.0

    Animation GIF ActiveX is a 32bit OLE Control Module to display GIF file(still and animation, GIF87a and GIF89a) in OLE Container. It supports all GIF89a standard, including transparent, animation, ...

    CSS3 animation属性制作逼真的大风车旋转动画

    它由多个子属性组成,包括`animation-name`、`animation-duration`、`animation-timing-function`、`animation-delay`、`animation-iteration-count`、`animation-direction`、`animation-fill-mode`和`animation-...

Global site tag (gtag.js) - Google Analytics