发布网友 发布时间:2023-09-20 22:29
共1个回答
热心网友 时间:2024-11-25 06:01
在activity中开启fragment时,FragmentTransaction在add()或replace()之前,调用setCustomAnimations()来实现fragment转场动画;
setCustomAnimations()方法还有一个两个参数的重载方法可以使用;
该方法需要在资源文件res/anim下添加转场动画,如下:
注意:1.该方法一定要在add或replace之前调用,否则无效;2.setCustomAnimations方法有一个很大的bug,就是在内存重启后所有设置的动画都将失效。
setTranseion是FragmentTransaction的方法,而onCreateAnimation是Fragment的方法,一般两个方法需要配合使用。而且它们不会像setCustomAnimations一样,即使是内存重启也不会失效,因为他们是动态调用的。
先来看一下setTranseion方法:
很明显,要实现动画,我们只能传TRANSIT_FRAGMENT_OPEN和TRANSIT_FRAGMENT_CLOSE,他们分别表示进场和退场,首先使用FragmentTransaction设置Transeion:
单独使用setTranseion的话,FragmentManager会生成默认的动画;源码如下:
setTranseion和和Fragment的onCreateAnimation配合使用:
transit对应FragmentTransaction设置的动作,onCreateAnimation在Fragment的每个操作动作中都会被回调,最好是配合FragmentTransaction的setTranseion方法使用,才能更加灵活的实现各种动画,不然onCreateAnimation方法的transit参数永远是0,而nextAnim与setCustomAnimations有关,而一般不推荐使用setCustomAnimations。