Android 幀動(dòng)畫使用詳情
Android 幀動(dòng)畫
1、幀動(dòng)畫
使用一系列不同的圖片,然后像一卷膠卷一樣按順序播放,這是一種傳統(tǒng)的動(dòng)畫,也可稱為幀動(dòng)畫。也可以比喻為像一卷膠卷一樣按順序播放。
播放起來(lái),有點(diǎn)像在看gif圖。
本文介紹使用AnimationDrawable類來(lái)實(shí)現(xiàn)動(dòng)畫效果。
為了開(kāi)發(fā)方便,我們可以在xml中指定動(dòng)畫各個(gè)幀的信息。
2、使用背景圖片
這是第一個(gè)例子。我們先準(zhǔn)備4張圖片(圖片請(qǐng)自備)放進(jìn)res/drawable/
中。
在這個(gè)目錄里,再新建一個(gè)文件ani_frame_1.xml
。
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ani_frame_1" android:oneshot="false"> <item android:drawable="@drawable/f_zan_1" android:duration="250" /> <item android:drawable="@drawable/f_zan_4" android:duration="250" /> <item android:drawable="@drawable/f_zan_3" android:duration="250" /> <item android:drawable="@drawable/f_zan_2" android:duration="250" /> </animation-list>
可以看到根節(jié)點(diǎn)<animation-list>
包含了4個(gè)item
。每個(gè)子節(jié)點(diǎn)都定義了一個(gè)幀。
duration是這一幀的時(shí)常(毫秒)。drawable
是指定可繪制資源。oneshot="false"
表示讓動(dòng)畫一直循環(huán)播放下去。
這樣動(dòng)畫資源就準(zhǔn)備好了。
在layout中準(zhǔn)備一個(gè)ImageView,用它來(lái)顯示動(dòng)畫
<ImageView android:id="@+id/iv1" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginTop="60dp" />
在activity中操作這個(gè)ImageView。把動(dòng)畫資源設(shè)置為背景。
var mFrameIv: ImageView? = null // override fun onCreate(savedInstanceState: Bundle?) mFrameIv = findViewById(R.id.iv1) mFrameIv!!.setBackgroundResource(R.drawable.ani_frame_1)
把ImageView的背景強(qiáng)轉(zhuǎn)為AnimationDrawable。播放動(dòng)畫,要用AnimationDrawable.start()
方法。
var mFrameIv: ImageView? = null // override fun onCreate(savedInstanceState: Bundle?) mFrameIv = findViewById(R.id.iv1) mFrameIv!!.setBackgroundResource(R.drawable.ani_frame_1)
當(dāng)動(dòng)畫正在播放時(shí),調(diào)用start()
方法是不會(huì)影響當(dāng)前播放的。
停止動(dòng)畫,AnimationDrawable.stop()
val ani: AnimationDrawable = mFrameIv!!.background as AnimationDrawable ani.stop()
stop()
方法可以讓動(dòng)畫停止在當(dāng)前幀。再調(diào)用start()
的話,會(huì)從頭開(kāi)始播放。
3、使用src
前面我們利用的是ImageView的背景資源。我們也可以使用src
。
準(zhǔn)備另一個(gè)動(dòng)畫資源ani_frame_2
。
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ani_frame_1" android:oneshot="true"> <item android:drawable="@drawable/f_zan_1" android:duration="250" /> <item android:drawable="@drawable/f_zan_4" android:duration="250" /> <item android:drawable="@drawable/f_zan_3" android:duration="250" /> <item android:drawable="@drawable/f_zan_2" android:duration="250" /> </animation-list>
android:oneshot="true",
動(dòng)畫播放1次后就會(huì)自行停止并保持在最后一幀。
! 注意,停止后并不是回到第一幀。
然后在layout中,把它設(shè)置為ImageView的src
。
<ImageView android:id="@+id/iv1" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginTop="60dp" android:src="@drawable/ani_frame_2" />
在activity中就不是操作ImageView的background
了,而是操作drawable
。
// 啟動(dòng) val ani: AnimationDrawable = frameIv.drawable as AnimationDrawable ani.start() // 停止 val ani: AnimationDrawable = frameIv.drawable as AnimationDrawable ani.stop()
可以看到,2個(gè)例子中都需要操作AnimationDrawable。
請(qǐng)務(wù)必注意,對(duì) AnimationDrawable.start()
方法不能在 Activity 的 onCreate()
方法期間調(diào)用,因?yàn)?AnimationDrawable 尚未完全附加到窗口。如果想立即播放動(dòng)畫而無(wú)需互動(dòng),那么可能需要從 Activity 中的 onStart()
方法進(jìn)行調(diào)用,該方法會(huì)在 Android 在屏幕上呈現(xiàn)視圖時(shí)調(diào)用。
AnimationDrawable類有幾個(gè)屬性可以注意一下
屬性 | 說(shuō)明 |
---|---|
isOneShot | 是否只播放1次,與xml中的android:oneshot對(duì)應(yīng) |
isRunning | 當(dāng)前動(dòng)畫是否正在播放 |
numberOfFrames | 幀的數(shù)量 |
到此這篇關(guān)于Android 幀動(dòng)畫使用詳情的文章就介紹到這了,更多相關(guān)Android 幀動(dòng)畫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android?registerForActivityResult新用法實(shí)現(xiàn)兩個(gè)Activity間數(shù)據(jù)傳遞
這篇文章主要為大家介紹了Android?registerForActivityResult新用法實(shí)現(xiàn)兩個(gè)Activity間數(shù)據(jù)傳遞詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04android教程之intent的action屬性使用示例(intent發(fā)短信)
這篇文章主要介紹了android中intent的action屬性使用示例,提供了使用intent撥打電話、發(fā)送短信、播放mp3的代碼2014-01-01Android入門之利用Spinner實(shí)現(xiàn)彈出選擇對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android里如何巧用Spinner做彈出選擇對(duì)話框,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下2022-11-11Android隨機(jī)給出加減乘除的四則運(yùn)算算術(shù)題
這篇文章主要為大家詳細(xì)介紹了Android隨機(jī)給出加減乘除的四則運(yùn)算算術(shù)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Android?十六進(jìn)制狀態(tài)管理實(shí)例詳解
這篇文章主要為大家介紹了Android?十六進(jìn)制狀態(tài)管理實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android入門之使用SimpleAdapter實(shí)現(xiàn)復(fù)雜界面布局
這篇文章主要為大家詳細(xì)介紹了Android如何使用SimpleAdapter實(shí)現(xiàn)復(fù)雜的界面布局,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Android有一定的幫助,需要的可以參考一下2022-11-11Android開(kāi)發(fā)學(xué)習(xí)筆記 淺談WebView
WebView(網(wǎng)絡(luò)視圖)能加載顯示網(wǎng)頁(yè),可以將其視為一個(gè)瀏覽器。它使用了WebKit渲染引擎加載顯示網(wǎng)頁(yè),實(shí)現(xiàn)WebView有以下兩種不同的方法2014-11-11Android實(shí)現(xiàn)從相冊(cè)選擇照片功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)從相冊(cè)選擇照片功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03