Android 平臺提供了一套完整的動畫框架,使得開發者能夠用它來開發各類動畫效果,本文將向讀者闡述 Android 的動畫框架是如何實現的。任何一個框架都有其優點和侷限性,只有明白了其實現原理,開發者才能知道哪些功能能夠利用框架來實現,哪些功能須用其餘途徑實現。Android 平臺提供了兩類動畫,一類是 Tween 動畫,即經過對場景裏的對象不斷作圖像變換 ( 平移、縮放、旋轉 ) 產生動畫效果;第二類是 Frame 動畫,即順序播放事先作好的圖像,跟電影相似。本文是由兩部分組成的有關 Android 動畫框架詳解的第一部分原理篇, 主要分析 Tween 動畫的實現原理, 最後簡單介紹在 Android 中如何經過播放 Gif 文件來實現動畫。咱們先看一下動畫示例來一點感性認識。 java
使用動畫示例程序的效果是點擊按鈕,TextView 旋轉一週。讀者也能夠參看 Apidemos 中包 com.example.android.apis.animationview 下面的 Transition3d 和 com.example.android.apis.view 下面的 Animation1/Animation2/Animation3 示例代碼。 api
清單 1. 代碼直接使用動畫 app
package com.ray.animation; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.Button; public class TestAnimation extends Activity implements OnClickListener{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn =(Button)findViewById(R.id.Button); btn.setOnClickListener(this); } public void onClick(View v){ Animation anim=null; anim=new?RotateAnimation(0.0f,+360.0f); anim.setInterpolator(new AccelerateDecelerateInterpolator()); anim.setDuration(3000); findViewById(R.id.TextView01).startAnimation(anim); } } |
使用 XML 文件方式,在打開 Eclipse 中新建的 Android 工程的 res 目錄中新建 anim 文件夾,而後在 anim 目錄中新建一個 myanim.xml( 注意文件名小寫 ),內容以下 : 框架
其中的 java 代碼以下: ide
package com.ray.animation; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.TextView; public class TestAnimation extends Activity implements OnClickListener{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn =(Button)findViewById(R.id.Button01); btn.setOnClickListener(this); } @Override public void onClick(View v){ Animation anim=AnimationUtils.loadAnimation(this,R.anim.my_rotate_action); findViewById(R.id.TextView01).startAnimation(anim); } } |