一、Tween動(dòng)畫基礎(chǔ)知識(shí):
Tween動(dòng)畫在Android中分為4類躬柬,它們分別是:
AlphaAnimation(透明度動(dòng)畫)
TranslateAnimation(平移動(dòng)畫)
ScaleAnimation(縮放動(dòng)畫)
RotateAnimation(旋轉(zhuǎn)動(dòng)畫)
都繼承自android.view.Animation類挨决,它們都是表示從一個(gè)狀態(tài)A向狀態(tài)B變化的一個(gè)過程敦锌,所以英文名字叫Tween動(dòng)畫、中文名叫:“補(bǔ)間動(dòng)畫”谬泌、“中間動(dòng)畫”滔韵。
二、問題描述:
當(dāng)我們讓一個(gè)控件進(jìn)行平移掌实、旋轉(zhuǎn)等動(dòng)畫之后陪蜻,希望這個(gè)控件隱藏,一般在Animation.AnimationListener()中onAnimationEnd(Animation animation)方法中setVisibility(View.GONE)贱鼻,這時(shí)發(fā)現(xiàn)該控件并沒有隱藏宴卖。
三、問題原因:
Tween動(dòng)畫在進(jìn)行動(dòng)畫時(shí)邻悬,只能作用于View症昏,而且視圖動(dòng)畫改變的只是View的繪制效果,View真正的屬性并沒有改變父丰,相當(dāng)于說移動(dòng)或者旋轉(zhuǎn)的只是改控件的復(fù)制品肝谭,本不是原來控件;屬性動(dòng)畫移動(dòng)的是原來的控件础米,所以并不會(huì)出現(xiàn)該情況分苇。
四、解決方案:
只需要調(diào)用一下clearAnimation()方法或者去掉setFillAfter(true)語句即可屁桑!
實(shí)驗(yàn)證明只要在setVisibility之前設(shè)置View的mCurrentAnimation為null就可以医寿,因此調(diào)用setAnimation(null)也是可以的。從源碼來看setFillAfter為false時(shí)也會(huì)間接導(dǎo)致調(diào)用clearAnimation蘑斧,而clearAnimation在這里使setVisibility有效的原因也是置mCurrentAnimation為null了靖秩。