GitHub地址:https://github.com/covetcode/TextChangeAnimator
![](https://github.com/covetcode/TextChangeAnimator/raw/master/GIF.gif)
原理:文字透明度變?yōu)?再變回來晤愧,透明度到達0的時候調用TextView的setText招驴。
內(nèi)部使用ValueAnimator而不是直接繼承TextView掸刊,對TextView和動畫解耦。使用時只需在要使用動畫的時候調用ValueAnimator.create(TextView)挤渐,把目標TextView傳入阵翎,內(nèi)部通過TextView.setTextColor改變顏色的透明度。
一些應該注意的地方:
1.ValueAnimation.ofFloat(float...)里只有首尾兩個參數(shù)是必定會變化到东囚,中間的參數(shù)則不一定能夠變化到跺嗽,而且坑的是每次start執(zhí)行后的結果都不一樣。比如說ofFloat(1,0,1)舔庶,看起來像是由1到0抛蚁,再由0到1。然而實際上0很有可能會被跳過去惕橙,所以用animatior.getAnimatedValue == 0來判斷動畫進行到中間并不可靠瞧甩,時靈時不靈。
在這里我用ofFlot(1,0,0,1),雖然肯定會變化到0弥鹦,但是會在0這里停留幾次肚逸。
2.在onAnimationEnd()里面調用ValueAniamton.start()或者revers(),不起作用彬坏。
初步猜測是因為字調用onAnimtion之后ValueAnimation又進行了一些操作朦促,導致新啟動后直接結束。
3.對于顏色透明度變化的動畫栓始,可通過修改int color的前八位(二進制下)的值改變透明度务冕。
android中顏色的表示是用16進制的int來表示,比如說純白就是0xFFFFFFFF幻赚,其中前兩個F代表透明度禀忆,后面6個F則代表具體的顏色。因此我們要先白色改為透明只需變?yōu)?x00FFFFFF落恼,用位運算很容易就可以做到箩退。以下是TextChangeAnimator中具體的代碼:
int color = mOldColor&0x00FFFFFF|((int)((mOldColor>>>24)*value)<<24);