Android(安卓)动画

动画是创建运动和形状变化的过程。

android 中的动画可以从很多方面实现。在本章中,我们将讨论一种简单且广泛使用的制作动画的方法,称为 补间动画 (Tween Animation)。


补间动画(Tween Animation)

Tween Animation 采用一些参数,如开始值、结束值、大小、持续时间、旋转角度等,并对该对象执行所需的动画。它可以应用于任何类型的对象。所以为了使用它,android 为我们提供了一个名为 Animation 的类。

为了在 android 中执行动画,我们将调用 AnimationUtils 类的静态函数 loadAnimation()。我们将在动画对象的实例中接收结果。其语法如下:

  1. Animation animation = AnimationUtils.loadAnimation(getApplicationContext(),
  2. R.anim.myanimation);

注意第 2 个参数。它是我们的动画 xml 文件的名称。您必须在 res 目录下创建一个名为 anim 的新文件夹,并在 anim 文件夹下制作一个 xml 文件。

这个动画类有许多有用的功能,如下所示:

编号Method & 描述
1

start()

此方法启动动画。

2

setDuration(long duration)

此方法设置动画的持续时间。

3

getDuration()

此方法获取由上述方法设置的持续时间。

4

end()

此方法结束动画。

5

cancel()

此方法取消动画。

为了将此动画应用于对象,我们只需调用对象的 startAnimation() 方法。其语法为:

  1. ImageView image1 = (ImageView)findViewById(R.id.imageView1);
  2. image.startAnimation(animation);

实例

下面的实例演示了在 android 中使用动画。您可以从菜单中选择不同类型的动画,所选动画将应用于屏幕上的 imageView

要实验这个实例,您需要在模拟器或实际设备上运行。

步骤描述
1您将使用 Android studio IDE 创建一个 Android 应用程序,并将其命名为 com.example.sairamkrishna.myapplication 包下的 My Application
2修改 src/MainActivity.java 文件添加动画代码。
3修改布局 XML 文件 res/layout/activity_main.xml 添加必要的 GUI 组件。
4在res目录下创建一个新文件夹,并将其命名为 anim 通过访问 res/anim 来确认
5右键单击 anim 并单击 new 并选择 Android XML 文件您必须创建下面列出的不同文件。
6创建文件 myanimation.xml,clockwise.xml,fade.xml,move.xml,blink.xml,slide.xml 并添加 XML 代码。
7无需更改默认字符串常量。Android studio 在 values/string.xml 中处理默认常量。
8运行应用程序并选择正在运行的 android 设备,并在其上安装应用程序并验证结果。

下面是修改的 MainActivity.java

  1. package com.example.sairamkrishna.myapplication;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.view.animation.Animation;
  6. import android.view.animation.AnimationUtils;
  7. import android.widget.ImageView;
  8. import android.widget.Toast;
  9. public class MainActivity extends Activity {
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. }
  15. public void clockwise(View view){
  16. ImageView image = (ImageView)findViewById(R.id.imageView);
  17. Animation animation = AnimationUtils.loadAnimation(getApplicationContext(),
  18. R.anim.myanimation);
  19. image.startAnimation(animation);
  20. }
  21. public void zoom(View view){
  22. ImageView image = (ImageView)findViewById(R.id.imageView);
  23. Animation animation1 = AnimationUtils.loadAnimation(getApplicationContext(),
  24. R.anim.clockwise);
  25. image.startAnimation(animation1);
  26. }
  27. public void fade(View view){
  28. ImageView image = (ImageView)findViewById(R.id.imageView);
  29. Animation animation1 =
  30. AnimationUtils.loadAnimation(getApplicationContext(),
  31. R.anim.fade);
  32. image.startAnimation(animation1);
  33. }
  34. public void blink(View view){
  35. ImageView image = (ImageView)findViewById(R.id.imageView);
  36. Animation animation1 =
  37. AnimationUtils.loadAnimation(getApplicationContext(),
  38. R.anim.blink);
  39. image.startAnimation(animation1);
  40. }
  41. public void move(View view){
  42. ImageView image = (ImageView)findViewById(R.id.imageView);
  43. Animation animation1 =
  44. AnimationUtils.loadAnimation(getApplicationContext(), R.anim.move);
  45. image.startAnimation(animation1);
  46. }
  47. public void slide(View view){
  48. ImageView image = (ImageView)findViewById(R.id.imageView);
  49. Animation animation1 =
  50. AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide);
  51. image.startAnimation(animation1);
  52. }
  53. }

这里是修改的 res/layout/activity_main.xml

  1. <RelativeLayout
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
  10. <TextView
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="Alert Dialog"
  14. android:id="@+id/textView"
  15. android:textSize="35dp"
  16. android:layout_alignParentTop="true"
  17. android:layout_centerHorizontal="true" />
  18. <TextView
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:text="cankaoshouce"
  22. android:id="@+id/textView2"
  23. android:textColor="#ff3eff0f"
  24. android:textSize="35dp"
  25. android:layout_below="@+id/textView"
  26. android:layout_centerHorizontal="true" />
  27. <ImageView
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:id="@+id/imageView"
  31. android:src="@drawable/abc"
  32. android:layout_below="@+id/textView2"
  33. android:layout_alignRight="@+id/textView2"
  34. android:layout_alignEnd="@+id/textView2"
  35. android:layout_alignLeft="@+id/textView"
  36. android:layout_alignStart="@+id/textView"/>
  37. <Button
  38. android:layout_width="wrap_content"
  39. android:layout_height="wrap_content"
  40. android:text="zoom"
  41. android:id="@+id/button"
  42. android:layout_below="@+id/imageView"
  43. android:layout_alignParentLeft="true"
  44. android:layout_alignParentStart="true"
  45. android:layout_marginTop="40dp"
  46. android:onClick="clockwise"/>
  47. <Button
  48. android:layout_width="wrap_content"
  49. android:layout_height="wrap_content"
  50. android:text="clockwise"
  51. android:id="@+id/button2"
  52. android:layout_alignTop="@+id/button"
  53. android:layout_centerHorizontal="true"
  54. android:onClick="zoom"/>
  55. <Button
  56. android:layout_width="wrap_content"
  57. android:layout_height="wrap_content"
  58. android:text="fade"
  59. android:id="@+id/button3"
  60. android:layout_alignTop="@+id/button2"
  61. android:layout_alignParentRight="true"
  62. android:layout_alignParentEnd="true"
  63. android:onClick="fade"/>
  64. <Button
  65. android:layout_width="wrap_content"
  66. android:layout_height="wrap_content"
  67. android:text="blink"
  68. android:onClick="blink"
  69. android:id="@+id/button4"
  70. android:layout_below="@+id/button"
  71. android:layout_alignParentLeft="true"
  72. android:layout_alignParentStart="true" />
  73. <Button
  74. android:layout_width="wrap_content"
  75. android:layout_height="wrap_content"
  76. android:text="move"
  77. android:onClick="move"
  78. android:id="@+id/button5"
  79. android:layout_below="@+id/button2"
  80. android:layout_alignRight="@+id/button2"
  81. android:layout_alignEnd="@+id/button2"
  82. android:layout_alignLeft="@+id/button2"
  83. android:layout_alignStart="@+id/button2" />
  84. <Button
  85. android:layout_width="wrap_content"
  86. android:layout_height="wrap_content"
  87. android:text="slide"
  88. android:onClick="slide"
  89. android:id="@+id/button6"
  90. android:layout_below="@+id/button3"
  91. android:layout_toRightOf="@+id/textView"
  92. android:layout_toEndOf="@+id/textView" />
  93. </RelativeLayout>

这里是 res/anim/myanimation.xml 的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <scale xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:fromXScale="0.5"
  5. android:toXScale="3.0"
  6. android:fromYScale="0.5"
  7. android:toYScale="3.0"
  8. android:duration="5000"
  9. android:pivotX="50%"
  10. android:pivotY="50%" >
  11. </scale>
  12. <scale xmlns:android="http://schemas.android.com/apk/res/android"
  13. android:startOffset="5000"
  14. android:fromXScale="3.0"
  15. android:toXScale="0.5"
  16. android:fromYScale="3.0"
  17. android:toYScale="0.5"
  18. android:duration="5000"
  19. android:pivotX="50%"
  20. android:pivotY="50%" >
  21. </scale>
  22. </set>

这里是 res/anim/clockwise.xml 的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <rotate xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:fromDegrees="0"
  5. android:toDegrees="360"
  6. android:pivotX="50%"
  7. android:pivotY="50%"
  8. android:duration="5000" >
  9. </rotate>
  10. <rotate xmlns:android="http://schemas.android.com/apk/res/android"
  11. android:startOffset="5000"
  12. android:fromDegrees="360"
  13. android:toDegrees="0"
  14. android:pivotX="50%"
  15. android:pivotY="50%"
  16. android:duration="5000" >
  17. </rotate>
  18. </set>

这里是 res/anim/fade.xml 的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:interpolator="@android:anim/accelerate_interpolator" >
  4. <alpha
  5. android:fromAlpha="0"
  6. android:toAlpha="1"
  7. android:duration="2000" >
  8. </alpha>
  9. <alpha
  10. android:startOffset="2000"
  11. android:fromAlpha="1"
  12. android:toAlpha="0"
  13. android:duration="2000" >
  14. </alpha>
  15. </set>

这里是 res/anim/blink.xml 的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <alpha android:fromAlpha="0.0"
  4. android:toAlpha="1.0"
  5. android:interpolator="@android:anim/accelerate_interpolator"
  6. android:duration="600"
  7. android:repeatMode="reverse"
  8. android:repeatCount="infinite"/>
  9. </set>

这里是 res/anim/move.xml 的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:interpolator="@android:anim/linear_interpolator"
  5. android:fillAfter="true">
  6. <translate
  7. android:fromXDelta="0%p"
  8. android:toXDelta="75%p"
  9. android:duration="800" />
  10. </set>

这里是 res/anim/slide.xml 的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:fillAfter="true" >
  4. <scale
  5. android:duration="500"
  6. android:fromXScale="1.0"
  7. android:fromYScale="1.0"
  8. android:interpolator="@android:anim/linear_interpolator"
  9. android:toXScale="1.0"
  10. android:toYScale="0.0" />
  11. </set>

这里是 res/values/string.xml 的代码

  1. <resources>
  2. <string name="app_name">My Application</string>
  3. </resources>

这里是默认的 AndroidManifest.xml 文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.sairamkrishna.myapplication" >
  4. <application
  5. android:allowBackup="true"
  6. android:icon="@drawable/ic_launcher"
  7. android:label="@string/app_name"
  8. android:theme="@style/AppTheme" >
  9. <activity
  10. android:name="com.example.animation.MainActivity"
  11. android:label="@string/app_name" >
  12. <intent-filter>
  13. <action android:name="android.intent.action.MAIN" />
  14. <category android:name="android.intent.category.LAUNCHER" />
  15. </intent-filter>
  16. </activity>
  17. </application>
  18. </manifest>

让我们尝试运行您的应用程序。我假设你已经将实际的 Android 移动设备与计算机连接。要从 Android studio 运行应用程序,请打开项目的一个活动文件,然后单击工具栏上的运行 Eclipse Eclipse Run Icon 图标。Android studio 将呈现如下界面:

选择 zoom 缩放按钮,将显示以下屏幕:

现在选择 slide 滑动按钮,它将显示以下屏幕:

现在选择 move 移动按钮,它将显示以下屏幕:

现在选择 clockwise 顺时针按钮,将显示以下屏幕:

现在选择 fade 淡出按钮,它将显示以下屏幕:

注意:如果您在模拟器中运行它,您可能不会体验到平滑的动画效果。为了体验流畅的动画,你必须在 android 手机上运行它。