我刚刚发现,每次在Fragment上设置setRetainInstance(true)时,它都会按预期工作(片段数据被保留),但这会导致片段的自定义动画在屏幕旋转后再次执行。
有没有办法在屏幕旋转时避免/禁用这些动画?
使用以下动画创建片段:
setCustomAnimations(R.anim.slide_in_right,R.anim.slide_out_left,R.anim.slide_in_left, R.anim.slide_out_right);
所以,我不想要那些"滑动动画"在屏幕旋转时再次执行。
答案 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只是一个什么都不做的动画。祝你好运。