Android 幀動(dòng)畫(huà)使用詳情
Android 幀動(dòng)畫(huà)
1、幀動(dòng)畫(huà)
使用一系列不同的圖片,然后像一卷膠卷一樣按順序播放,這是一種傳統(tǒng)的動(dòng)畫(huà),也可稱(chēng)為幀動(dòng)畫(huà)。也可以比喻為像一卷膠卷一樣按順序播放。
播放起來(lái),有點(diǎn)像在看gif圖。
本文介紹使用AnimationDrawable類(lèi)來(lái)實(shí)現(xiàn)動(dòng)畫(huà)效果。
為了開(kāi)發(fā)方便,我們可以在xml中指定動(dòng)畫(huà)各個(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à)一直循環(huán)播放下去。
這樣動(dòng)畫(huà)資源就準(zhǔn)備好了。
在layout中準(zhǔn)備一個(gè)ImageView,用它來(lái)顯示動(dòng)畫(huà)
<ImageView
android:id="@+id/iv1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="60dp" />
在activity中操作這個(gè)ImageView。把動(dòng)畫(huà)資源設(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)畫(huà),要用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)畫(huà)正在播放時(shí),調(diào)用start()方法是不會(huì)影響當(dāng)前播放的。
停止動(dòng)畫(huà),AnimationDrawable.stop()
val ani: AnimationDrawable = mFrameIv!!.background as AnimationDrawable ani.stop()
stop()方法可以讓動(dòng)畫(huà)停止在當(dāng)前幀。再調(diào)用start()的話,會(huì)從頭開(kāi)始播放。

3、使用src
前面我們利用的是ImageView的背景資源。我們也可以使用src。
準(zhǔn)備另一個(gè)動(dòng)畫(huà)資源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)畫(huà)播放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)畫(huà)而無(wú)需互動(dòng),那么可能需要從 Activity 中的 onStart() 方法進(jìn)行調(diào)用,該方法會(huì)在 Android 在屏幕上呈現(xiàn)視圖時(shí)調(diào)用。
AnimationDrawable類(lèi)有幾個(gè)屬性可以注意一下
| 屬性 | 說(shuō)明 |
|---|---|
| isOneShot | 是否只播放1次,與xml中的android:oneshot對(duì)應(yīng) |
| isRunning | 當(dāng)前動(dòng)畫(huà)是否正在播放 |
| numberOfFrames | 幀的數(shù)量 |
到此這篇關(guān)于Android 幀動(dòng)畫(huà)使用詳情的文章就介紹到這了,更多相關(guān)Android 幀動(dòng)畫(huà)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Kotlin中空判斷與問(wèn)號(hào)和感嘆號(hào)標(biāo)識(shí)符使用方法
最近使用kotlin重構(gòu)項(xiàng)目,遇到了一個(gè)小問(wèn)題,在Java中,可能會(huì)遇到判斷某個(gè)對(duì)象是否為空,為空?qǐng)?zhí)行一段邏輯,不為空?qǐng)?zhí)行另外一段邏輯,下面這篇文章主要給大家介紹了關(guān)于Kotlin中空判斷與問(wèn)號(hào)和感嘆號(hào)標(biāo)識(shí)符處理操作的相關(guān)資料,需要的朋友可以參考下2022-12-12
Android編程之TabWidget選項(xiàng)卡用法實(shí)例分析
這篇文章主要介紹了Android編程之TabWidget選項(xiàng)卡用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了TabWidget選項(xiàng)卡的具體實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下2015-12-12
Android GridView添加頭部問(wèn)題的解決
這篇文章主要介紹了Android GridView添加頭部問(wèn)題的解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Android彈窗ListPopupWindow的簡(jiǎn)單應(yīng)用詳解
這篇文章主要為大家詳細(xì)介紹了Android彈窗ListPopupWindow的簡(jiǎn)單應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Android自定義定時(shí)鬧鐘開(kāi)發(fā)
這篇文章主要為大家詳細(xì)介紹了Android自定義定時(shí)鬧鐘開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
基于Android10渲染Surface的創(chuàng)建過(guò)程
這篇文章主要介紹了基于Android10渲染Surface的創(chuàng)建過(guò)程,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Android webview手動(dòng)校驗(yàn)https證書(shū)(by 星空武哥)
有些時(shí)候由于Android系統(tǒng)的bug或者其他的原因,導(dǎo)致我們的webview不能驗(yàn)證通過(guò)我們的https證書(shū),最明顯的例子就是華為手機(jī)mate7升級(jí)到Android7.0后,手機(jī)有些網(wǎng)站打不開(kāi)了,而更新了webview的補(bǔ)丁后就沒(méi)問(wèn)題了2017-09-09
Android自定義實(shí)現(xiàn)一個(gè)省份簡(jiǎn)稱(chēng)鍵盤(pán)
這篇文章主要為大家詳細(xì)介紹了Android如何自定義實(shí)現(xiàn)一個(gè)省份簡(jiǎn)稱(chēng)鍵盤(pán),可以用在車(chē)牌輸入等地方,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
Android開(kāi)發(fā)筆記之Android中數(shù)據(jù)的存儲(chǔ)方式(一)
這篇文章主要介紹了Android開(kāi)發(fā)筆記之Android中數(shù)據(jù)的存儲(chǔ)方式(一) 的相關(guān)資料,需要的朋友可以參考下2016-01-01
Android ViewFlipper簡(jiǎn)單應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Android ViewFlipper簡(jiǎn)單應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01

