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

ali*_*tar 5 android fragmenttransaction

我有5个片段,我使用以下代码为FragmentTransaction setCustomAnimations:

FragmentTransaction trans = getFragmentManager().beginTransaction();
trans.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
Run Code Online (Sandbox Code Playgroud)

但是如何为这个设置自定义动画:

@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);
}
Run Code Online (Sandbox Code Playgroud)

ant*_*ycr 21

还有第二个setCustomAnimations方法(这里是支持库方法),它有两个额外的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);
Run Code Online (Sandbox Code Playgroud)

然后当你打电话

getFragmentManager().popBackStack();
Run Code Online (Sandbox Code Playgroud)

动画将播放,传递给该方法的第三个动画将播放您最初删除的视图,第四个动画将播放可见且正在删除的视图.根据您对初始事务的当前动画,我猜你想使用android.R.anim.slide_in_rightandroid.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);
Run Code Online (Sandbox Code Playgroud)

最初将片段添加到堆栈时,您只需要调用setCustomAnimations(就像您现在正在做的那样,只需添加额外的动画ID),后面的堆栈将记住您设置的动画,并在您弹回时自动播放它们.

注意:此方法仅在API 13及更高版本中可用,除非您使用支持v4 jar,它看起来像您(因为您使用的是getSupportFragmentManager()而不是常规方法).