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

Android提供了Animation

阅读更多

关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式:

1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;

2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。

动画类型
下面先来看看Android提供的动画类型。Android的animation由四种类型组成

在XML文件中:

•alpha        渐变透明度动画效果
•scale        渐变尺寸伸缩动画效果
•translate  画面转换位置移动动画效果
•rotate      画面转移旋转动画效果

在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性:

•AlphaAnimation渐变透明度动画效果
•ScaleAnimation渐变尺寸伸缩动画效果
•TranslateAnimation画面转换位置移动动画效果
•RotateAnimation画面转移旋转动画效果



2011-3-5 14:59 上传下载附件 (74.18 KB) 



Tween Animation
一个tween动画将对视图对象中的内容进行一系列简单的转换(位置,大小,旋转,透明性)。如果你有一个文本视图对象,你可以移动它,旋转它,让它变大或让它变小,如果文字下面还有背景图像,背景图像也会随着文件进行转换。

使用XML来定义Tween Animation

动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也可以使同时的。例如,你让文本内容从左边移动到右边,然后旋转180度,或者在移动的过程中同时旋转,没个转换需要设置一些特殊的参数(开始和结束的大小尺寸的大小变化,开始和结束的旋转角度等等,也可以设置些基本的参数(例如,开始时间与周期),如果让几个转换同时发生,可以给它们设置相同的开始时间,如果按序列的话,计算开始时间加上其周期。

Tween Animation共同的节点属性

属性[类型]
功能
备注

Duration[long]
属性为动画持续时间
时间以毫秒为单位

fillAfter [boolean]
当设置为true ,该动画转化在动画结束后被应用

fillBefore[boolean]
当设置为true ,该动画转化在动画开始前被应用


interpolator

指定一个动画的插入器
有一些常见的插入器
accelerate_decelerate_interpolator
加速-减速 动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速- 动画插入器
其他的属于特定的动画效果

repeatCount[int]
动画的重复次数


RepeatMode[int]
定义重复的行为
1:重新开始  2:plays backward

startOffset[long]
动画之间的时间间隔,从上次动画停多少时间开始执行下个动画

zAdjustment[int]
定义动画的Z Order的改变
0:保持Z Order不变
1:保持在最上层
-1:保持在最下层


表二


XML节点
功能说明

alpha
渐变透明度动画效果

<alpha
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″ />

fromAlpha

属性为动画起始时透明度


0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之间的float数据类型的数字

duration为动画持续时间,ms单位



toAlpha


属性为动画结束时透明度



表三


scale
渐变尺寸伸缩动画效果

<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:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″ />

fromXScale[float] fromYScale[float]
为动画起始时,X、Y坐标上的伸缩尺寸
0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大

toXScale [float]
toYScale[float]
为动画结束时,X、Y坐标上的伸缩尺寸

pivotX[float]
pivotY[float]
为动画相对于物件的X、Y坐标的开始位置
属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置







表四


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

<translate
android:fromXDelta=”30″
android:toXDelta=”-80″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″ />

fromXDelta
toXDelta
为动画、结束起始时 X坐标上的位置


fromYDelta
toYDelta
为动画、结束起始时 Y坐标上的位置







表五


rotate
画面转移旋转动画效果

<rotate
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″ />

fromDegrees
为动画起始时物件的角度
说明
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)
(负数from——to负数:逆时针旋转)
(正数from——to正数:顺时针旋转)
(正数from——to负数:逆时针旋转)

toDegrees
属性为动画结束时物件旋转的角度 可以大于360度

pivotX
pivotY
为动画相对于物件的X、Y坐标的开始位
说明:以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置


下面给出一个完整的XML定义(SDK提供)

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

02.   <scale

03.          android:interpolator="@android:anim/accelerate_decelerate_interpolator"

04.          android:fromXScale="1.0"

05.          android:toXScale="1.4"

06.          android:fromYScale="1.0"

07.          android:toYScale="0.6"

08.          android:pivotX="50%"

09.          android:pivotY="50%"

10.          android:fillAfter="false"

11.          android:duration="700" />

12.   <set android:interpolator="@android:anim/decelerate_interpolator">

13.      <scale

14.             android:fromXScale="1.4" 

15.             android:toXScale="0.0"

16.             android:fromYScale="0.6"

17.             android:toYScale="0.0" 

18.             android:pivotX="50%" 

19.             android:pivotY="50%" 

20.             android:startOffset="700"

21.             android:duration="400" 

22.             android:fillBefore="false" />

23.      <rotate 

24.             android:fromDegrees="0" 

25.             android:toDegrees="-45"

26.             android:toYScale="0.0" 

27.             android:pivotX="50%" 

28.             android:pivotY="50%"

29.             android:startOffset="700"

30.             android:duration="400" />

31.   </set>

32.</set>
复制代码

Tween Animation如何使用

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

01.//main.xml中的ImageView

02.ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);

03.//加载动画

04.Animation hyperspaceJumpAnimation =AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);

05.//使用ImageView显示动画

06.spaceshipImage.startAnimation(hyperspaceJumpAnimation);
复制代码

如何在Java代码中定义动画

01.//在代码中定义 动画实例对象 

02.

03.private Animation myAnimation_Alpha; 

04.

05.private Animation myAnimation_Scale; 

06.

07.private Animation myAnimation_Translate; 

08.

09.private Animation myAnimation_Rotate; 

10.

11.    //根据各自的构造方法来初始化一个实例对象 

12.

13.myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f); 

14.

15.myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, 

16.

17.             Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 

18.

19.myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f); 

20.

21.myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,

22.

23.Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
复制代码

interpolator的解释

interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。




Interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator 是基类,封装了所有 Interpolator 的共同方法,它只有一个方法,即 getInterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。Android 提供了几个 Interpolator 子类,实现了不同的速度曲线,如下:


AccelerateDecelerateInterpolator
在动画开始与介绍的地方速率改变比较慢,在中间的时候加速

AccelerateInterpolator
在动画开始的地方速率改变比较慢,然后开始加速

CycleInterpolator
动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator
在动画开始的地方速率改变比较慢,然后开始减速

LinearInterpolator
在动画的以均匀的速率改变






Frame Animation
Frame Animation是顺序播放事先做好的图像,跟电影类似。不同于animation package, Android SDK提供了另外一个类AnimationDrawable来定义、使用Frame Animation。

Frame Animation可以在XML Resource定义(还是存放到res\anim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画,当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:



XML属性
说明

drawable
当前帧引用的drawable资源

duration
当前帧显示的时间(毫秒为单位)

oneshot
如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。

variablePadding
If true, allows the drawable’s padding to change based on the current state that is selected.

visible
规定drawable的初始可见性,默认为flase;





下面就给个具体的XML例子,来定义一帧一帧的动画:




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

02.    androidneshot="true">

03.    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />

04.    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />

05.    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />

06.</animation-list>
复制代码


上面的XML就定义了一个Frame Animation,其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每帧动画持续200毫秒。

然后我们将以上XML保存在res/anim/文件夹下,命名为rocket_thrust.xml,显示动画的代码:



01.AnimationDrawable rocketAnimation;

02.

03.public void onCreate(Bundle savedInstanceState) {

04.  super.onCreate(savedInstanceState);

05.  setContentView(R.layout.main);

06.

07.  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);

08.  rocketImage.setBackgroundResource(R.anim.rocket_thrust);

09.  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

10.}

11.

12.public boolean onTouchEvent(MotionEvent event) {

13.  if (event.getAction() == MotionEvent.ACTION_DOWN) {

14.    rocketAnimation.start();

15.    return true;

16.  }

17.  return super.onTouchEvent(event);

18.}
复制代码


代码运行的结果:3张图片按照顺序的播放一次.

有一点需要强调的是:启动Frame Animation动画的代码rocketAnimation.start();不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。这里实在拖曳事件中实现的。

下面,阅读Android SDK中对AnimationDrawable的介绍,有个简单的了解:



AnimationDrawable


获取、设置动画的属性


int getDuration()
获取动画的时长

int getNumberOfFrames()
获取动画的帧数

boolean isOneShot()


Void setOneShot(boolean oneshot)

获取oneshot属性
设置oneshot属性

void inflate(Resurce r,XmlPullParser p,
AttributeSet attrs)


增加、获取帧动画

Drawable getFrame(int index)
获取某帧的Drawable资源

void addFrame(Drawable frame,int duration)
为当前动画增加帧(资源,持续时长)

动画控制

void start()
开始动画

void run()
外界不能直接掉调用,使用start()替代

boolean  isRunning()
当前动画是否在运行

void stop()
停止当前动画

分享到:
评论

相关推荐

    2011.10.18——— android 自定义Animation

    在Android开发中,动画(Animation)是提升用户体验和视觉效果的重要手段。这篇博客“2011.10.18——— android 自定义Animation”可能详细探讨了如何在Android平台上自定义各种动画效果,包括但不限于平移、旋转、...

    Android 动画 Animation Demo

    在Android开发中,动画(Animation)是提升用户体验和界面交互性的重要工具。Android动画主要分为两种类型:属性动画(Property Animation)和视图动画(View Animation)。本篇将深入探讨这两种动画机制,以及如何在...

    Android中的Animation的使用

    Android提供了多种动画机制,包括帧动画(Frame Animation)、补间动画(Tween Animation)、属性动画(Property Animation)。本篇将详细介绍Android中的Animation使用,结合源码分析,以及一些实用工具的运用。 ...

    android动画例子:tween animation and property animation

    随着Android 3.0(API级别11)的引入,Property Animation系统提供了一种更强大、更灵活的方式来创建动画。它不仅限于视图对象,还可以作用于任何对象的任意属性,甚至包括自定义对象。以下是Property Animation的...

    Android ViewFlipper Animation 使用

    总的来说,Android的ViewFlipper组件提供了一种简单而强大的方式来管理多个视图并添加动画效果。通过灵活地使用动画和切换方法,开发者可以创造出丰富的用户交互体验。在项目中,根据需求选择合适的动画类型和触发...

    Android Animation Demo

    此外,Android还提供了其他动画技术,如Property Animation API,它在API Level 11及以上版本引入,提供了更强大、更灵活的动画控制,包括ObjectAnimator、ValueAnimator和AnimatorSet等。 在实际项目中,开发者...

    android动画介绍之 自定义Animation动画

    本文将深入探讨Android自定义`Animation`动画的实现方式,帮助开发者更好地掌握这一技术。 Android动画分为多种类型,包括`Animation`类(补间动画)、`ViewPropertyAnimator`(属性动画)、以及`Transition`(过渡...

    Android TweenAnimation源码

    总的来说,Android TweenAnimation提供了丰富的视图动画功能,让开发者能够灵活地控制View在屏幕上的动态表现。通过理解和使用TweenAnimation的源码,我们可以更好地定制动画效果,提升应用的视觉吸引力和用户体验。...

    android_animation

    7. **动画属性动画**:除了View动画,Android还提供了属性动画系统,它更加灵活,可以对任何对象的任意属性进行动画处理。属性动画不仅支持View,还能对非View对象进行动画化,如数据模型等。 8. **值动画**:属性...

    Android 属性动画(Property Animation)

    Android属性动画(Property Animation)是Android 3.0(API级别11)引入的一个强大功能,它极大地扩展了Android的动画系统,使得开发者能够实现更丰富、更动态的视觉效果。与视图动画(View Animation)不同,属性...

    Android View中添加Animation.rar

    Android提供了两种基础的动画类型:`Tween Animation`(补间动画)和`Frame Animation`(帧动画)。 - **Tween Animation**:用于改变View的位置、大小、透明度等属性,通过指定起始值和结束值,在一定时间内平滑...

    Android Animation相关

    Android提供了多种动画类型,其中补间动画(Tween Animation)是最基础且广泛使用的一种。补间动画通过改变对象在帧之间的属性来实现平滑过渡的效果。在这个主题中,我们将深入探讨Android补间动画的原理、使用方法...

    Android代码-Android-Animation-Set

    Android Animation Detailed Tutorial / Android 动画详尽教程       中文讲解(README)请直接点击对应标题 English explanation(or readme), Do not click on the title, please click on the tip ...

    Android的Animation和Activity Animation例子

    Android提供了四种类型的Activity Animation: - **Slide Animation**(滑动动画):Activity从屏幕的一个边缘滑入或滑出。 - **Scale Animation**(缩放动画):Activity大小的变化。 - **Fade Animation**(淡入...

    Android Tween Animation动画效果详解

    Android Tween Animation动画的使用demo,以及自定义动画,原理解析,相关博客: http://blog.csdn.net/w18756901575/article/details/53081551

    animation图片移动效果

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

    Android Animation动画资源文件

    补间动画的核心在于Android的`android.view.animation`包,它提供了多种动画类型,如TranslateAnimation(平移)、RotateAnimation(旋转)、ScaleAnimation(缩放)和AlphaAnimation(透明度变化)。下面我们将深入...

    Android-Animation动画之Tween Animation补间动画

    补间动画(Tween Animation)是Android提供的基本动画类型,它通过对对象的透明度、大小、位置或旋转等属性进行平滑过渡来实现视觉效果。本篇文章将深入探讨Android中的Tween Animation,包括其原理、使用方法以及...

    Android的动画Animation详解

    ### Android的动画Animation详解 #### 一、动画概述 Android平台提供了丰富的动画支持,通过不同的方式可以实现多种视觉效果,从而提升用户体验。Android动画主要分为两大类:Tween动画(渐变动画)和Frame-by-...

Global site tag (gtag.js) - Google Analytics