GitHub地址:https://github.com/covetcode/TextChangeAnimator
原理:文字透明度变为0再变回来,透明度到达0的时候调用TextView的setText。
内部使用ValueAnimator而不是直接继承TextView,对TextView和动画解耦。使用时只需在要使用动画的时候调用ValueAnimator.create(TextView),把目标TextView传入,内部通过TextView.setTextColor改变颜色的透明度。
一些应该注意的地方:
1.ValueAnimation.ofFloat(float...)里只有首尾两个参数是必定会变化到,中间的参数则不一定能够变化到,而且坑的是每次start执行后的结果都不一样。比如说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则代表具体的颜色。因此我们要先白色改为透明只需变为0x00FFFFFF,用位运算很容易就可以做到。以下是TextChangeAnimator中具体的代码:
int color = mOldColor&0x00FFFFFF|((int)((mOldColor>>>24)*value)<<24);