我有一个像这样的动画附加的片段:
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().setCustomAnimations(
R.animator.card_flip_right_in, R.animator.card_flip_right_out,
R.animator.card_flip_left_in, R.animator.card_flip_left_out)
.replace(R.id.frame_container, fragment).commit();
我有两个问题。
1)片段在动画开始之前不会完全呈现(片段中发生了一些合理的错综复杂的事情,包括可能会获取绘制所需数据的HTTP调用。
2)在片段中还有其他动画,我不想在我确定用户实际看到它们之前就开始了。
我怀疑处理(1)的最佳方法是在Fragment报告已完成组装其所有部件之前不要调用commit()
,但对于(2)我看不到某种方法知道它肯定附加在Activity和渲染上(因此在Fragment中启动动画是安全的。)
所以,我想我的问题是......是commit()阻塞调用吗?我可以确定在下一行(或片段过渡动画结束时)渲染片段并开始制作动画是否安全?或者我应该在Transition上使用动画侦听器并告诉片段在Transition动画完成后启动其内部动画?
答案 0 :(得分:0)
1)你的策略是正确的。在Fragment中设置某种调用,它可以告诉你它已经完成了设置所需的后台工作。或者,您可以在片段外部执行此操作,并将该数据作为片段构造的一部分传递。
对于2)commit()不是阻塞调用,它是“在调度程序上抛出此函数”调用。您可以使用onActivityCreated()知道片段已创建并正确附加到窗口。当我在过去做过类似的事情时,我在该方法中添加了一个延迟动画,在片段管理器转换延迟过去之后触发,以开始片段中的动画。