`
李光正
  • 浏览: 28781 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android中的动画研究

阅读更多

Android中的动画研究

本文主要研究Android中的三种动画,第一种是单个View的各种动画效果,第二种是两个Active切换时的动画效果,第三种是类似于GifFrame 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.11.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%为物件的XY方向坐标上的中点位置

        长整型值:

            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%为物件的XY方向坐标上的中点位置

        长整型值:

            duration  属性为动画持续时间

            说明:       时间以毫秒为单位

-->

</set>

三、        如何使用XML中的动画效果

public static Animation loadAnimation (Context context, int id)

//第一个参数Context为程序的上下文   

//第二个参数id为动画XML文件的引用

//例子:

myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);

//使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件

findViewById(R.id.pw).startAnimation(myAnimation);//用此方法来启动动画

四、        如何在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)

六、        转场动画

StartActivity后即调用overridePendingTransition(int enterAnim, int exitAnim)

//in

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">  

    <translate  

    android:fromXDelta="100%p"   

    android:toXDelta="0"   

    android:duration="500"/>  

</set>

//out

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">  

    <translate  

    android:fromXDelta="0"   

    android:toXDelta="-100%p"   

    android:duration="500"/>  

</set>


 

七、        Frame By Frame

Frame by frame 指将一幅幅图片按序播放,效果像gif动画:

第一步:将用到的图片资源加到工程。

第二步:在xml里定义动画。

<?xml version="1.0" encoding="utf-8"?>

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="false">

    <item android:drawable="@drawable/rkof" android:duration="200" />

    <item android:drawable="@drawable/hkof" android:duration="200" />

    <item android:drawable="@drawable/gkof" android:duration="200" />

    <item android:drawable="@drawable/fkof" android:duration="200" />

    <item android:drawable="@drawable/ekof" android:duration="200" />

    <item android:drawable="@drawable/dkof" android:duration="200" />

    <item android:drawable="@drawable/ckof" android:duration="200" />

    <item android:drawable="@drawable/bkof" android:duration="200" />

    <item android:drawable="@drawable/akof" android:duration="200" />

</animation-list>

<!-- android:oneshot属性为true,它将会在最后一帧停下来,如果设置

false这个动画将循环播放 -->

第三步:定义AnimationDrawable对像

       ImageView myImage = (ImageView) findViewById(R.id.rocket_image);

       myImage.setBackgroundResource(R.anim.myframeanimation);

       AnimationDrawable frameAnimation=(AnimationDrawable) myImage.getBackground();

第四步:播放

       frameAnimation.start()
ApiDemo
中的动画研究:

 

Android 系统所支持的动画特效

1.       平滑:                     Graphics/AnimateDrawables

2.       淡入淡出        App/Activity/Animation

3.       放大缩小        App/Activity/Animation && Graphics/ScaleToFit

4.       翻转               Views/Animation/3D Transition && Graphics/PolyToPoly

5.       透明               App/Activity/Translucent

6.       模糊               App/Activity/Translucent Blur

7.       Overlay           Graphics/SurfaceView OverLay

8.       反弹效果        Views/Animation/Shake

9.       文字效果       Views/Animation/Push && Views/Animation/Interpolators

 

 

ReadCode

1.       FingerPaint

1.1.  path用于存储一次绘画,mouse down to mouse up

1.2.  Bitmap用于存储所有绘画,activity onCreate to OnDestory.

2.       AnimateDrawables

1.1.  View中创建变量AnimateDrawable

1.2.  Drawable 从资源中获取图片。

1.3.  Animation 定义动画

1.4.  开始动画

3.       Animation

1.1.    overridePendingTransition(R.anim.fade, R.anim.hold);

1.2.    overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);

4.       ScaleToFit

5.       PolyToPoly

1.1. 画线 drawLine

1.2. 画矩形 drawRect

1.3. 设置矩阵 关键,具体算法不知。

6.       Translucent

1.1. setContentView(R.layout.translucent_background);

7.       Translucent Blur

1.1. getWindow().setFlags

1.2. WindowManager.LayoutParams.FLAG_BLUR_BEHIND,

1.3. WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

8.       SufaceView Overlay

1.1    CubeRenderer

1.2    GLSurfaceView

9.       Shake

10.   Interpolators

 


 

一、2D

1.       Bitmap with alpha ort Alpha bitblt

2.       平滑移动效果。

3.       Arc Fills

4.       BitmapDecode 旗帜飘动特效。

5.       Mesh 网格特效

6.       Bitmap Pixels 渐变填充。

7.       Camera Preview

8.       Clipping

9.       Color Filters

10.   Color Matrix

11.   Compass

12.   Create Bitmap

13.   Layers

14.   Measure Text

15.   Path Effect

16.   Pattern

17.   Poly to Poly

18.   Regions

19.   RoundRects

20.   ScaleToFit

21.   SurfaceView Overlay

22.   Sweeps

23.   Vertices

 

二、3D

1.       Compressed Texture

2.       Cube Map

3.       GlSurfaceView

4.       Kube

5.       Matrix Palette Skinning

6.       Sprite Text

7.       Textured Triangle

8.       Touch Rotate

9.       Translucent GLSurfaceView

 

分享到:
评论
1 楼 mikite 2011-12-01  
mark,看看

相关推荐

    Android 属性动画和帧动画例子

    Android平台提供了两种主要的动画类型:属性动画(Property Animation)和帧动画(Frame Animation),它们在构建动态用户界面...在PropertyAnimationDemo中,我们可以看到如何实现这样的动画效果,进一步学习和研究。

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

    通过研究贝塞尔曲线的应用,理解动画的执行流程,并结合实际的阅读场景,开发者可以提升自己在Android动画设计方面的能力,为用户提供更佳的视觉和交互体验。同时,详尽的注释也使得这个实例成为初学者学习Android...

    Android-一个用于Android的轻量级粒子动画库

    在Android应用开发中,视觉效果和用户体验是至关重要的因素之一,而粒子动画则能为应用程序增添生动、引人入胜的交互元素...对于那些希望在应用中加入独特动画效果的Android开发者来说,这是一个值得研究和利用的资源。

    Android-Android上的Triangulation动画

    这篇文章将深入探讨这个主题,包括Android动画基础、SVG三角剖分的概念以及如何在Android应用中实现这种动画效果。 首先,我们来理解Android的动画系统。Android提供了多种动画机制,包括属性动画(Property ...

    android中常用动画控件代码集锦

    本资源包收集了多个常用的Android动画控件的代码示例,旨在帮助开发者更好地理解和实践Android动画。以下将详细阐述这些动画控件及其应用。 1. **BAnim_FilpLibrary**: 这个库可能包含了翻转动画的相关实现。在...

    Android数百种动画效果源码

    在Android开发中,动画是提升用户体验的关键因素之一。Android提供了多种动画机制,使得开发者能够创造出丰富多样的...通过学习和研究这些源码,开发者可以深入理解Android动画系统,提升应用的视觉表现力和用户体验。

    Android动画效果大全

    在"Demo_Animation"这个压缩包中,可能包含了各种Android动画的示例代码,开发者可以参考这些例子来学习和实践。通过研究和实践这些示例,不仅可以掌握基础的动画技术,还能了解到如何在项目中灵活运用,创造出令人...

    安卓动画效果相关-android过渡动画研究.rar

    这个压缩包"安卓动画效果相关-android过渡动画研究.rar"包含了一些关于过渡动画的研究项目,尽管可能无法一一验证每个示例,但它们可以作为学习和参考的资源。 过渡动画在Android中主要分为两种类型:Activity过渡...

    ANDROID开机动画分析

    在Android系统中,开机动画不仅是一段短暂的视觉体验,更是系统启动过程中的一个重要环节。这篇文章将深入探讨ANDROID开机动画的分析,涉及到的知识点包括Android系统的启动流程、动画的制作原理以及如何通过源码和...

    Android动画源码 Animation

    在Android开发中,动画是提升用户体验的关键因素之一。...开发者可以研究这些源码,了解Android动画系统的内部工作原理,学习如何根据需求定制和组合各种动画效果,从而提高应用的视觉吸引力和交互体验。

    修改Android开机动画

    首先,开机动画的地址:system\media\...官方最原始的开机动画在system\ framework\framework-res.apk\assets\images里面,里面主要是2张图片,高手可以去研究一下,说不定通过这个文件可以用代码实现动画的过程。

    android菜单展开的动画效果

    在Android开发中,实现丰富的用户界面是至关重要的,其中菜单的动画效果能极大地提升应用的交互体验和视觉吸引力。本文将深入探讨如何在Android中创建一个动态的菜单展开动画,以此来模仿卫星导航菜单(Satellite ...

    android 酷炫鱼动画

    帧动画是Android动画系统的基础部分,它通过连续播放一系列静态图像来创建动态效果,类似于传统的电影制作。在"FishAnimationDemo"项目中,开发者可能创建了一系列鱼的图片,并将它们放在一个动画资源文件(如anim...

    android开发中实用超炫的动画

    在Android开发中,动画是提升用户体验...通过深入研究Android-SpinKit-master这样的项目,开发者不仅可以学习到具体动画的实现,还能从中汲取灵感,设计出更多创新的动画效果,让你的Android应用在众多应用中脱颖而出。

    Android Path轨迹动画事列

    在Android开发中,Path轨迹动画是一种增强用户界面交互和视觉效果的重要技术。"Android Path轨迹动画事例"是一个示例项目,旨在展示如何在应用程序中创建类似Path应用的时间轴页面,这种页面以其精美的设计和流畅的...

    android游戏开场动画源代码

    本篇文章将详细解析`android游戏开场动画源代码`,并围绕`android 游戏源代码`、`android 游戏`以及`android动画`这三大标签展开讨论。 首先,我们来探讨一下Android游戏源代码。源代码是游戏的灵魂,它包含了游戏...

    Android 6.0 Launcher3 增加屏幕切换动画

    在Android系统中,Launcher是用户与设备交互的主要入口,它负责显示...通过深入研究源码和相关资源,开发者不仅可以了解到这一功能的具体实现,还可以学习到如何在自己的应用中实现类似的高级动画效果,提升用户体验。

    android 扇形菜单(属性动画实现)

    本文将深入探讨如何使用属性动画在Android中实现这种效果。 首先,我们要理解Android属性动画系统的基本概念。属性动画是Android 3.0(API Level 11)引入的一个功能,它允许开发者在没有实际改变视图属性的情况下...

    android MaterialDesign 动画

    在“MaterialDesignAnimation-master”这个压缩包中,你可能会找到这些概念的实例代码,通过研究这些代码,你可以深入理解如何在Android应用中实现Material Design的各种动画效果,并在自己的项目中加以应用,提升...

Global site tag (gtag.js) - Google Analytics