Android 动画专题(2)--- Frame Animation
在上一篇中,介紹了Tween Animation,這里我們將介紹另外一種動畫Frame Animation。
Frame Animation是順序播放事先做好的圖像,跟電影類似。
不同于animation package, Android SDK提供了另外一個類AnimationDrawable來定義來使用Frame Animation。
SDK位置:
Tween animation ?: android.view.animation 包
Frame animation ? : android.graphics.drawable.AnimationDrawable 類
1.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; |
2.案例分析
(1)定義XML,保存在res/anim/文件夾下,命名為rocket_thrust.xml
<animation-list xmlns:android=”http://schemas.android.com/apk/res/android” android:oneshot=”true”><item android:drawable=”@drawable/rocket_thrust1″ android:duration=”200″ /><item android:drawable=”@drawable/rocket_thrust2″ android:duration=”200″ /><item android:drawable=”@drawable/rocket_thrust3″ android:duration=”200″ /> </animation-list>?(上面的XML就定義了一個Frame Animation,其包含3幀動畫,3幀動畫中分別應用了drawable中的3張圖片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每幀動畫持續200毫秒。)
(2)在java類中的OnCreate()中增加如下代碼:
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image); rocketImage.setBackgroundResource(R.anim.rocket_thrust);? rocketAnimation = (AnimationDrawable) rocketImage.getBackground();最后還需要增加啟動動畫的代碼:
public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { rocketAnimation.start(); return true; } return super.onTouchEvent(event); }?碼運行的結果想必大家應該就知道了(3張圖片按照順序的播放一次)。
不過有一點需要強調的是:啟動Frame Animation動畫的代碼rocketAnimation.start();不能在OnCreate()中,因為在OnCreate()中AnimationDrawable還沒有完全的與ImageView綁定,在OnCreate()中啟動動畫,就只能看到第一張圖片。
3.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() | 停止當前動畫 |
Frame Animation的定義、使用比較簡單,在這里已經詳細介紹完了,更加深入的學習還是到Android SDK去仔細了解吧,在Android SDK中也包含很多這方面的例子程序。
轉載于:https://www.cnblogs.com/playing/archive/2011/08/21/2147874.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Android 动画专题(2)--- Frame Animation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米fastboot持续多久(MIUI1
- 下一篇: 深入理解Android 卷I 提供预定