DevSupport

Android Tween动画与setVisibility冲突

2017-02-20  本文已影响91人  枫叶丶鑫鑫

一、Tween动画基础知识:

Tween动画在Android中分为4类,它们分别是:
AlphaAnimation(透明度动画)
TranslateAnimation(平移动画)
ScaleAnimation(缩放动画)
RotateAnimation(旋转动画)
都继承自android.view.Animation类,它们都是表示从一个状态A向状态B变化的一个过程,所以英文名字叫Tween动画、中文名叫:“补间动画”、“中间动画”。

二、问题描述:

当我们让一个控件进行平移、旋转等动画之后,希望这个控件隐藏,一般在Animation.AnimationListener()onAnimationEnd(Animation animation)方法中setVisibility(View.GONE),这时发现该控件并没有隐藏。

三、问题原因:

Tween动画在进行动画时,只能作用于View,而且视图动画改变的只是View的绘制效果,View真正的属性并没有改变,相当于说移动或者旋转的只是改控件的复制品,本不是原来控件;属性动画移动的是原来的控件,所以并不会出现该情况。

四、解决方案:

只需要调用一下clearAnimation()方法或者去掉setFillAfter(true)语句即可!
实验证明只要在setVisibility之前设置View的mCurrentAnimation为null就可以,因此调用setAnimation(null)也是可以的。从源码来看setFillAfter为false时也会间接导致调用clearAnimation,而clearAnimation在这里使setVisibility有效的原因也是置mCurrentAnimation为null了。

上一篇下一篇

猜你喜欢

热点阅读