最近在做一个需求,是一个注册页面,要求输入完11位的手机号后让这个EditText做一个左移的动画,很自然的,我想到了用TranslateAnimation,当输入11位的时候,这个EditText顺利的左移了,但是当删除一位号码的时候,出现了号码的残影,这样的效果可不能达标啊。所以我的做法是:
1)调用EditText的clearAnimation()函数,阴影是消失了,但是动画也消失了,EditText会回到原来的位置,所以这种方案不可行
2)获取包裹EditText的父layout,通过对父layout执行invalidate()函数,这个函数会对View进行刷新,这样,问题看似解决了
但是问题又来了,这种解决方案只是在一部分机型上可行,在一些机型上甚至会出现两个光标的情况,通过仔细观察,发现其中一个光标是在闪动的,一个是不变的,突然恍然大悟,原来TranslateAnimation只是对当前的View进行截图,然后以图像的形式进行移动,EditText本质上是没有任何移动的,所以会出现两个光标的情况
最后,我用了属性动画,但是这只能在Android3.0以上使用,3.0以下版本想要使用属性动画要有NineoldAndroids动画库的支持,它的原理是通过不断改变View的属性值进行动画,所以不会出现EditText不移动的问题,这样问题得到顺利的解决