如何在屏幕旋转后禁用/避免片段自定义动画

时间:2014-04-11 15:18:15

标签: android rotation fragment

我刚刚发现,每次在Fragment上设置setRetainInstance(true)时,它都会按预期工作(片段数据被保留),但这会导致片段的自定义动画在屏幕旋转后再次执行。

有没有办法在屏幕旋转时避免/禁用这些动画?

使用以下动画创建片段:

setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left,R.anim.slide_in_left,                     R.anim.slide_out_right);

所以,我不想要那些"滑动动画"在屏幕旋转时再次执行。

1 个答案:

答案 0 :(得分:11)

这是我处理它的方式

private boolean viewsHaveBeenDestroyed;

@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
    // This stops animation on rotation as we have a retained instance.
    boolean shouldNotAnimate = enter && viewsHaveBeenDestroyed;
    viewsHaveBeenDestroyed = false;
    return shouldNotAnimate ? AnimationUtils.loadAnimation(getActivity(), R.anim.none)
            : super.onCreateAnimation(transit, enter, nextAnim);
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    viewsHaveBeenDestroyed = true;
}

R.anim.none只是一个什么都不做的动画。祝你好运。