引言
Android動(dòng)畫可以幫助我們實(shí)現(xiàn)一些炫酷的效果智蝠,掌握動(dòng)畫主要在于練習(xí)。在面試中更多地根據(jù)實(shí)際需求回答奈梳。
面試題
-
下面哪一項(xiàng)不屬于android的動(dòng)畫類型杈湾?
**A** Tween
**B** Alpha
**C** Frame
**D** Animation
正確答案:D
解析:Android動(dòng)畫有三種:View動(dòng)畫、幀動(dòng)畫攘须、屬性動(dòng)畫
Tween(補(bǔ)間動(dòng)畫)漆撞,即View動(dòng)畫,包括了平移(Translate)、縮放(Scale)叫挟、旋轉(zhuǎn)(Rotate)艰匙、透明度(Alpha),所以A抹恳、B正確员凝。
Frame(幀動(dòng)畫)循序播放一組預(yù)先定義好的圖片,所以C正確
屬性動(dòng)畫(Property Animation)類名是:ValueAnimator奋献、ObjectAnimator
下面屬于android的動(dòng)畫分類的有?(android3.0之前)
A Tween
B Frame
C Draw
D Animation
正確答案:AB
解析:兩種健霹,一種是Tween 動(dòng)畫、還有一種是 Frame 動(dòng)畫瓶蚂。 Tween 動(dòng)畫糖埋,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng)、放大窃这、縮小以及產(chǎn)生透明度的變化 ; 另一種 Frame 動(dòng)畫瞳别,傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn)杭攻,類似電影祟敛。屬性動(dòng)畫是android3.0之后才有的。-
動(dòng)畫占用大量?jī)?nèi)存兆解,如何優(yōu)化馆铁?
- **OOM問題**:這個(gè)問題主要出現(xiàn)在幀動(dòng)畫中,當(dāng)圖片數(shù)量較多且圖片較大時(shí)就極易出現(xiàn)OOM锅睛,這個(gè)在實(shí)際開發(fā)中要尤其注意埠巨,盡量避免使用幀動(dòng)畫。
- **內(nèi)存泄露**:在屬性動(dòng)畫中有一類無(wú)限循環(huán)的動(dòng)畫现拒,這類動(dòng)畫需要在Activity退出時(shí)及時(shí)停止辣垒,否則將導(dǎo)致Activity無(wú)法釋放從而造成內(nèi)存泄露,通過驗(yàn)證后發(fā)現(xiàn)View動(dòng)畫并不存在此問題印蔬。
-
使用動(dòng)畫的注意事項(xiàng)
- OOM問題:這個(gè)問題主要出現(xiàn)在幀動(dòng)畫中乍构,當(dāng)圖片數(shù)量較多且圖片較大時(shí)就極易出現(xiàn)OOM,這個(gè)在實(shí)際開發(fā)中要尤其注意扛点,盡量避免使用幀動(dòng)畫。
- 內(nèi)存泄露:在屬性動(dòng)畫中有一類無(wú)限循環(huán)的動(dòng)畫岂丘,這類動(dòng)畫需要在Activity退出時(shí)及時(shí)停止陵究,否則將導(dǎo)致Activity無(wú)法釋放從而造成內(nèi)存泄露,通過驗(yàn)證后發(fā)現(xiàn)View動(dòng)畫并不存在此問題奥帘。
- 兼容性問題:動(dòng)畫在3.0以下的系統(tǒng)有兼容性問題铜邮,在某些特殊場(chǎng)景可能無(wú)法正常工作,因此要做好適配工作。
- View動(dòng)畫的問題:View動(dòng)畫是對(duì)View的影像做動(dòng)畫松蒜,并不是真正改變View的狀態(tài)扔茅,因此有時(shí)候會(huì)出現(xiàn)動(dòng)畫完成后View無(wú)法隱藏的現(xiàn)象,即setVisibility(View.GOEN)失效了秸苗,這個(gè)時(shí)候只要調(diào)用view.clearAnimation()清除View動(dòng)畫即可解決問題召娜。
- 不要使用px:在進(jìn)行動(dòng)畫的過程中,要盡量使用dp惊楼,使用px會(huì)導(dǎo)致在不用的設(shè)備上有不用的效果玖瘸。
- 動(dòng)畫元素的交互:從3.0開始,將view移動(dòng)(平移)后檀咙,屬性動(dòng)畫的單擊事件觸發(fā)位置為移動(dòng)后的位置雅倒,但是View動(dòng)畫仍然在原位置。在Android3.0以前的系統(tǒng)中弧可,不管是View動(dòng)畫還是屬性動(dòng)畫蔑匣,新位置都無(wú)法觸發(fā)單擊事件同時(shí),老位置仍然能觸發(fā)單擊事件(因?yàn)閷傩詣?dòng)畫在Android3.0以前是沒有的棕诵,是通過兼容包實(shí)現(xiàn)的裁良,底層也是調(diào)用View動(dòng)畫)。
-
硬件加速:使用動(dòng)畫的過程中年鸳,建議開啟硬件加速趴久,這樣會(huì)提高動(dòng)畫的流暢性。
開啟方法:
在你的Android manifest文件搔确,添加hardwareAccelerated
屬性就可以了彼棍。可以給整個(gè)application添加膳算,也可以單獨(dú)給一個(gè)acitivty添加座硕,該屬性默認(rèn)值為false;
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="true" />
<activity android:hardwareAccelerated="false" />
</application>