`
chanshui
  • 浏览: 84550 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android动画开发

 
阅读更多
本文主要研究Android中的三种动画,第一种是单个View的各种动画效果,第二种是两个Activity切换时的动画效果,第三种是类似于Gif的Frame By Frame动画效果,其中View的各种动画包括在xml文件中定义和代码中定义两种方式。
一、动画基本类型:
如下表所示,Android的动画由四种类型组成,即可在xml中定义,也可在代码中定义,如下所示:


 
 
XML

CODE
 
渐变透明度动画效果
 
alpha

AlphaAnimation
 
渐变尺寸伸缩动画效果
 
scale

ScaleAnimation
 
画面转换位置移动动画效果
 
translate

TranslateAnimation
 
画面转移旋转动画效果
 
rotate

RotateAnimation


二、如何在XML文件中定义动画
1.alpha
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!--  表示透明度从0.1到1.0,时长为3000ms。-->
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="3000"
/>
</set>
2.scale
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <scale 
          android:interpolator=
                     "@android:anim/accelerate_decelerate_interpolator"
          android:fromXScale="0.0"
          android:toXScale="1.4"
          android:fromYScale="0.0"
          android:toYScale="1.4"
          android:pivotX="50%"
          android:pivotY="50%"
          android:fillAfter="false"
          android:duration="700" />
</set>
<!-- 尺寸伸缩动画效果 scale
       属性:interpolator 指定一个动画的插入器,共三种:
            accelerate_decelerate_interpolator  加速-减速 动画插入器
            accelerate_interpolator        加速-动画插入器
            decelerate_interpolator        减速- 动画插入器
        其他的属于特定的动画效果
      浮点型值:        
            fromXScale 属性为动画起始时 X坐标上的伸缩尺寸   
            toXScale   属性为动画结束时 X坐标上的伸缩尺寸
            fromYScale 属性为动画起始时Y坐标上的伸缩尺寸   
            toYScale   属性为动画结束时Y坐标上的伸缩尺寸
            说明:
                 以上四种属性值 
                    0.0表示收缩到没有
                    1.0表示正常无伸缩    
                    值小于1.0表示收缩 
                    值大于1.0表示放大
            pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置
            说明:
                    以上两个属性值 从0%-100%中取值
                    50%为物件的X或Y方向坐标上的中点位置
        长整型值:
            duration  属性为动画持续时间
            说明:   时间以毫秒为单位
        布尔型值:
            fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
-->
3.translate
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="30"
android:toXDelta="-80"
android:fromYDelta="30"
android:toYDelta="300"
android:duration="2000"
/>
<!-- translate 位置转移动画效果
        整型值:
            fromXDelta 属性为动画起始时 X坐标上的位置   
            toXDelta   属性为动画结束时 X坐标上的位置
            fromYDelta 属性为动画起始时 Y坐标上的位置
            toYDelta   属性为动画结束时 Y坐标上的位置
            注意:
                     没有指定fromXType toXType fromYType toYType 时候,
                     默认是以自己为相对参照物            
        长整型值:
            duration  属性为动画持续时间
            说明:   时间以毫秒为单位
-->
</set>
4.rotate
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0"
        android:toDegrees="+350"        
        android:pivotX="50%"
        android:pivotY="50%"    
        android:duration="3000" /> 
<!-- rotate 旋转动画效果
       属性:interpolator 指定一个动画的插入器,共三种:
                accelerate_decelerate_interpolator   加速-减速 动画插入器
                accelerate_interpolator               加速-动画插入器
                decelerate_interpolator               减速- 动画插入器
             其他的属于特定的动画效果                          
       浮点数型值:
            fromDegrees 属性为动画起始时物件的角度   
            toDegrees   属性为动画结束时物件旋转的角度 可以大于360度       
            说明:
                     当角度为负数——表示逆时针旋转
                     当角度为正数——表示顺时针旋转             
                     (负数from——to正数:顺时针旋转)  
                     (负数from——to负数:逆时针旋转)
                     (正数from——to正数:顺时针旋转)
                     (正数from——to负数:逆时针旋转)
            pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置               
            说明:        以上两个属性值 从0%-100%中取值
                         50%为物件的X或Y方向坐标上的中点位置
        长整型值:
            duration  属性为动画持续时间
            说明:       时间以毫秒为单位
-->
</set>
三、如何使用XML中定义的动画
public static Animation loadAnimation (Contextcontext, int id)
//第一个参数Context为程序的上下文  
//第二个参数id为动画XML文件的引用
//例子:
myAnimation=AnimationUtils.loadAnimation(this,R.anim.my_action);
//使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件

四、如何在java代码中定义动画
1.代码:
//在代码中定义 动画实例对象
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
   
//根据各自的构造方法来初始化一个实例对象
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
             Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
2. 分析:
1.1 AlphaAnimation

第一步:AlphaAnimation类对象定义
private AlphaAnimation myAnimation_Alpha;
第二步:AlphaAnimation类对象构造
AlphaAnimation(float fromAlpha, float toAlpha)
//第一个参数fromAlpha为 动画开始时候透明度
//第二个参数toAlpha为 动画结束时候透明度
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
//说明:
//                0.0表示完全透明
//                1.0表示完全不透明
第三步:设置动画持续时间
myAnimation_Alpha.setDuration(5000);
//设置时间持续时间为 5000毫秒

1.2 ScaleAnimation
第一步:ScaleAnimation类对象定义
private AlphaAnimation myAnimation_Scale;
第二步:ScaleAnimation类对象构造
ScaleAnimation(float fromX, float toX, float fromY, float toY,
           int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
//第一个参数fromX为动画起始时 X坐标上的伸缩尺寸   
//第二个参数toX为动画结束时 X坐标上的伸缩尺寸    
//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸   
//第四个参数toY为动画结束时Y坐标上的伸缩尺寸 
/*说明:
                    以上四种属性值   
                    0.0表示收缩到没有
                    1.0表示正常无伸缩    
                    值小于1.0表示收缩 
                    值大于1.0表示放大
*/
//第五个参数pivotXType为动画在X轴相对于物件位置类型 
//第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第七个参数pivotXType为动画在Y轴相对于物件位置类型  
//第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
             Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
第三步:设置动画持续时间
myAnimation_Scale.setDuration(700);
//设置时间持续时间为 700毫秒
1.3 TranslateAnimation
第一步:TranslateAnimation类对象定义
private AlphaAnimation myAnimation_Translate;
第二步:TranslateAnimation类对象构造
TranslateAnimation(float fromXDelta, float toXDelta,
                       float fromYDelta, float toYDelta)

//第一个参数fromXDelta为动画起始时 X坐标上的移动位置
//第二个参数toXDelta为动画结束时 X坐标上的移动位置
//第三个参数fromYDelta为动画起始时Y坐标上的移动位置
//第四个参数toYDelta为动画结束时Y坐标上的移动位置

第三步:设置动画持续时间 m
myAnimation_Translate.setDuration(2000);

1.4 RotateAnimation
第一步:RotateAnimation类对象定义
private AlphaAnimation myAnimation_Rotate;

第二步:RotateAnimation类对象构造
RotateAnimation(float fromDegrees, float toDegrees,
            int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

//第一个参数fromDegrees为动画起始时的旋转角度
//第二个参数toDegrees为动画旋转到的角度
//第三个参数pivotXType为动画在X轴相对于物件位置类型 
//第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第五个参数pivotXType为动画在Y轴相对于物件位置类型
//第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
第三步:设置动画持续时间
myAnimation_Rotate.setDuration(3000);
五、如何使用java代码中的动画效果
使用从View父类继承过来的方法startAnimation()来为View或是子类View等等添加一个动画效果
public void startAnimation (Animation animation)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        Frame动画主要是通过AnimationDrawable类来实现的,它有start()和stop()两个重要的方法来启动和停止动画。Frame动画一般通过XML文件配置,在工程的res/anim目录下创建一个XML配置文件,该配置文件有一个<animation-list>根元素和若干个<item>子元素。
    实现一个人跳舞的Frame动画,6张图片如下所示:


1、把这6张图片放到res/drawable目录下,分别取名为:p01.png,p02.png,p03.png,p04.png,p05.png,p06.png。
2、在res/anim目录下创建一个XML配置文件,文件名为:dance.xml,文件内容:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:apk="http://schemas.android.com/apk/res/android" apk:oneshot="false">
    <item apk:drawable="@drawable/p01" apk:duration="500" />
    <item apk:drawable="@drawable/p02" apk:duration="500" />
    <item apk:drawable="@drawable/p03" apk:duration="500" />
    <item apk:drawable="@drawable/p04" apk:duration="500" />
    <item apk:drawable="@drawable/p05" apk:duration="500" />
    <item apk:drawable="@drawable/p06" apk:duration="500" />
</animation-list>
    apk:oneshot指示是否只运行一次,设置为false则意味着循环播放。
3、在res/layout目录下创建layout配置文件dance.xml,文件内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:apk="http://schemas.android.com/apk/res/android" apk:orientation="vertical" apk:layout_width="fill_parent" apk:layout_height="fill_parent">
    <!-- Frame动画图片 -->
    <ImageView apk:id="@+id/ImgDance" apk:layout_width="wrap_content" apk:layout_height="wrap_content" apk:background="@anim/dance" />
   
    <!-- 动画控制按钮 -->
    <LinearLayout apk:layout_width="fill_parent" apk:layout_height="wrap_content" apk:orientation="horizontal">
        <Button apk:text="开始" apk:layout_width="wrap_content" apk:layout_height="wrap_content" apk:onClick="onStartDance" />
        <Button apk:text="结束" apk:layout_width="wrap_content" apk:layout_height="wrap_content" apk:onClick="onStopDance" />
    </LinearLayout>
</LinearLayout>
    apk:background使用上面的动画作为背景,意味着要取得动画,只要取得该View的背景即可,当然可以在代码中通过设置背景的方式指定;
    apk:onClick指示按钮的动作,当然可以在代码中通过实现OnClickListener的方式实现。
4、Activity代码:
package com.aboy.android.study.animation;
 
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import com.aboy.android.study.R;
 
/**
* Frame动画
*/
public class FrameActivity extends Activity {
    public static final String TAG = "FrameActivity";
     
    // 显示动画的组件
    private ImageView imgDance;
    // Frame动画
    private AnimationDrawable animDance;
     
    /**
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    public void onCreate(Bundle cycle) {
        super.onCreate(cycle);
        super.setContentView(R.layout.dance);
         
        // 实例化组件
        this.imgDance = (ImageView) super.findViewById(R.id.ImgDance);
         
        // 获得背景(6个图片形成的动画)
        this.animDance = (AnimationDrawable) this.imgDance.getBackground();
    }
     
    /**
     * 按钮:开始‘跳舞’动画
     */
    public void onStartDance(View view) {
        this.animDance.start();
    }
     
    /**
     * 按钮:停止‘跳舞’动画
     */
    public void onStopDance(View view) {
        this.animDance.stop();
    }
     
}
    代码就那么的几行,运行之后,点击“开始”按钮后,动画一直不停的播放,直到点击“停止”为止。
分享到:
评论

相关推荐

    android动画开发教程(超详细讲解付源代码)

    本教程将深入探讨Android动画开发,通过超详细的讲解和实际的源代码示例,帮助开发者们掌握这一技术。以下是对Android动画开发的一些核心知识点的详细阐述: 一、动画类型 Android提供两种主要的动画机制:属性动画...

    Android开发:动画开发

    本教程将深入探讨如何在Android平台上进行动画开发,让你的应用程序能够流畅、完美地展示动画效果。 首先,Android提供了两种主要的动画类型:属性动画(Property Animation)和视图动画(View Animation)。视图...

    Android 抖动动画效果

    首先,我们要知道在Android中,动画主要分为两种类型:补间动画(Tween Animation)和帧动画(Frame Animation)。抖动动画属于补间动画的一种,因为它涉及到对象的位置、大小或透明度等属性的变化。补间动画是通过...

    android 动画开发,可直接使用

    在实际开发中,开发者可能会根据需求结合属性动画和帧动画。例如,一个复杂的登录动画可能包括视图淡入淡出,同时按钮执行旋转效果。在这种情况下,`AnimatorSet`可以帮助我们同步这些动画。 通过`framedemo`这个...

    Android动画效果--渐变动画

    在Android开发中,动画效果是提升用户体验的关键因素之一。渐变动画是Android动画体系中的一种基本类型,它可以为用户界面带来生动和动态的感觉。本文将深入探讨四种主要的渐变动画:Alpha(透明度)、Scale(缩放)...

    android开发中实用超炫的动画

    总之,理解并熟练掌握Android中的动画机制,是提升应用质量和用户体验的关键。通过深入研究Android-SpinKit-master这样的项目,开发者不仅可以学习到具体动画的实现,还能从中汲取灵感,设计出更多创新的动画效果,...

    android气泡动画实现

    下面我们将详细探讨如何在Android中实现这样的气泡爆炸动画。 首先,我们需要理解Android中的动画系统。Android支持两种主要的动画类型:属性动画(Property Animation)和视图动画(View Animation)。在这个案例...

    Android翻页动画效果完整实例代码

    在Android中,这种动画可以通过自定义View或者使用开源库来实现。在这个实例中,开发者使用了贝塞尔曲线来模拟纸张的弯曲和翻转效果。 2. **贝塞尔曲线**:贝塞尔曲线是一种在二维图形设计中广泛应用的参数曲线,它...

    android动画-蝴蝶飞的动画

    “点这里查看更多优质源码~.url”链接可能是指向一个资源库或者社区,其中包含更多关于Android动画开发的示例和教程,供开发者参考学习。 总的来说,制作“蝴蝶飞”的动画需要对Android动画系统有深入理解,包括但...

    android游戏开场动画源代码

    在Android平台上,游戏开发是一个非常活跃的领域,各种各样的游戏层出不穷。《Abduction》是一款深受玩家喜爱的经典游戏,它的开场动画源代码是许多开发者学习和借鉴的对象。本篇文章将详细解析`android游戏开场动画...

    Android-一个展示Android的物理动画的playground

    首先,我们要理解的是Android中的物理动画。物理动画模拟真实世界中的物理规则,如重力、碰撞、摩擦等,使得动画更加自然流畅。在Android SDK中,有两个主要的库支持物理动画:Android Animation API和Android ...

    Android帧动画和补间动画总结

    在Android中,我们可以使用`AnimationDrawable`类来实现帧动画。首先,我们需要在资源目录下创建一个XML文件(如`frame_animation.xml`),定义每一帧图片及其持续时间: ```xml &lt;animation-list xmlns:android=...

    Android晃动动画例子

    下面我们将深入探讨如何在Android中实现这样的晃动动画。 1. **创建晃动动画** 在Android中,我们可以使用`ObjectAnimator`或`ValueAnimator`来创建自定义动画。晃动动画通常涉及到视图位置的改变,通过在X轴上...

    Android加载中转圈动画效果

    在本文中,我们将深入探讨如何在Android中实现这样的加载中转圈动画效果。 首先,Android提供了多种内置的动画资源,例如`ProgressBar`类,它支持多种样式,包括旋转(旋转进度条)动画。`ProgressBar`有`...

    Android吸入动画效果

    补间动画是Android中最基础的动画形式,它可以改变视图的位置、大小、透明度等属性。 首先,让我们了解什么是补间动画。补间动画在Android中是指在一定时间内改变一个或多个属性的过程。这些属性包括视图的位置、...

    Android动画测试源码

    在Android开发中,动画是提升用户体验的关键因素,它能让应用变得更加生动、有趣。这份"Android动画测试源码"提供了一种深入理解Android动画机制的方式,通过实际的代码示例进行学习和测试。以下是对相关知识点的...

    android动画例子大全

    本文将深入探讨在Android中如何创建和使用各种动画,特别是属性动画和补间动画,这些都是Android动画的基础和核心。 首先,我们来理解补间动画(Tween Animation)。补间动画是在两个关键帧之间平滑地改变对象的...

    Android 动画开发

    android动画由四种类型组成,本文将给与详细论述

    androidOpenGL实现3d动画

    这是用androidOpenGL 实现的3D 动画 导入工程即可运行。

    Android 游戏开发之Tween动画的实现

    Tween动画,源自于图形设计领域,意为“时间插值”,在Android中,它是通过`android.animation.ObjectAnimator`类来实现的。下面,我们将深入探讨如何在Android游戏中实现Tween动画,以及相关的技术细节。 首先,...

Global site tag (gtag.js) - Google Analytics