在应用程序中,我尝试动画删除片段。
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.
感谢您帮助我:)
答案 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();
}
})