Fragment中动画异常
1.FragmentA界面有动画效果,transaction.add()方式切换到其他FragmentB后,FragmentA只是hidden且并未销毁。
2.FragmentA仍然能接收到事件(广播),并对事件处理。
3.如接收到事件开始启动动画,动画监听器并未监听到动画执行,而是FragmentB切换回FragmentA后,FragmentA才迟迟执行动画,引发逻辑异常。
动画的引用方法(llConfigOpen为执行动画的View)
//引入动画文件
outAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_top_out);
outAnimation.reset();//动画重置
outAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override public void onAnimationStart(Animation animation){ } @Override public void onAnimationEnd(Animation animation){ }
@Override public void onAnimationRepeat(Animation animation){ }});
LogUtils.d(TAG, "llConfigOpen close now");
llConfigOpen.clearAnimation();//清除动画
llConfigOpen.startAnimation(outAnimation);//启动动画
解决方案1:
接收到事件或广播,启动动画前先判断当前Fragment是否显示,如显示才启动动画。
public synchronized void closeConfigView() {
//当前页面隐藏不启动动画,引发异常
if (isHidden()){
LogUtils.e(TAG,"当前Fragment未显示,不进行动画绘制");
return;
}
xxx
llConfigOpen.startAnimation(outAnimation);//启动动画
}
解决方案2:
Fragment切换不使用add()方式,改为replace()方式。