日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 动画专题(2)--- Frame Animation

發布時間:2023/12/19 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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表示動畫循環播放。
variablePaddingIf 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。