如何在此代码上为FragmentTransaction设置自定义动画

时间:2014-07-29 10:57:42

标签: android fragmenttransaction

我有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);
}

1 个答案:

答案 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()而不是常规方法)。