我有5个片段,我使用以下代码为FragmentTransaction设置自定义动画:
FragmentTransaction trans = getFragmentManager().beginTransaction();
trans.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
但是如何为这一个设置自定义动画:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK ) {
if (getSupportFragmentManager().getBackStackEntryCount() == 0)
{
this.finish();
return false;
}
else
{
getSupportFragmentManager().popBackStack();
return false;
}
}
return super.onKeyDown(keyCode, event);
}
答案 0 :(得分:19)
还有第二个setCustomAnimations方法(here's the support library method),它有两个额外的ID,用于包含弹出后台堆栈时要使用的动画。在最后一个点中弹出后堆栈(事务已反转)时,传递您希望发生的动画ID。
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(android.R.anim.slide_in_left,
android.R.anim.slide_out_right,
ANIMATION_ID_FOR_ENTERING_VIEW,
ANIMATION_ID_FOR_EXITING_VIEW);
然后当你打电话
getFragmentManager().popBackStack();
动画将播放,传递给该方法的第三个动画将播放您最初删除的视图,第四个动画将播放可见且正在删除的视图。根据您对初始交易的当前动画,我猜您想要使用 android.R.anim.slide_in_right 和 android.R.anim.slide_out_left 作为背面堆叠动画(见下文):
transaction.setCustomAnimations(android.R.anim.slide_in_left,
android.R.anim.slide_out_right,
android.R.anim.slide_in_right,
android.R.anim.slide_out_left);
最初将片段添加到堆栈时只需要调用setCustomAnimations(就像你现在正在做的那样,只需添加额外的动画ID),后面的堆栈会记住你设置的动画,并会在弹出时自动播放它们回来。
注意:此方法仅在API 13及更高版本中可用,除非您使用支持v4 jar,它看起来像您(因为您使用的是getSupportFragmentManager()而不是常规方法)。