动画删除片段

时间:2015-11-05 17:25:30

标签: android android-fragments android-animation

在应用程序中,我尝试动画删除片段。

transaction.remove(fragmentVideo).remove(fragmentProgressBar).replace(R.id.content_pane_calling, endFragment);
transaction.setCustomAnimations(R.anim.slide_in, R.anim.slide_up);
transaction.commit();

框架完全忽略了这一点。片段本身被删除,但视觉效果不佳。任何FragmentTransaction#replace都适用于这些动画。我正在使用SupportLibrary v23.1.

感谢您帮助我:)

2 个答案:

答案 0 :(得分:4)

必须在event.remove()/ add()/ replace()之前调用对transaction.setCustomAnimation()的调用,否则动画永远不会被运行。

所以你的代码看起来像是:

transaction.setCustomAnimations(R.anim.slide_in, R.anim.slide_up);
transaction.remove(fragmentVideo).remove(fragmentProgressBar).replace(R.id.content_pane_calling, endFragment);
transaction.commit();

答案 1 :(得分:0)

这是我过去经常遇到的一个常见问题。在决定使用Fragments时我非常小心,因为它们对UI动画非常不灵活。你可以在这里找到答案:

http://daniel-codes.blogspot.com/2013/09/smoothing-performance-on-fragment.html

完成动画后,您还可以动画片段并执行删除事务,以适当的顺序分别执行这两项操作。

//Pseudo Code

Animation anim = ... //this animates your fragment view
anim.setAnimationListener(new AnimationListener() {

    void onAnimFinish() {
        transaction.remove(fragmentVideo).remove(fragmentProgressBar).replace(R.id.content_pane_calling, endFragment);
        transaction.setCustomAnimations(R.anim.slide_in, R.anim.slide_up);
        transaction.commit()
        getFragmentManager().executePendingTransactions();
    }

})