Android Fragment.onCreateAnimator()的文档在哪里?
该方法的整个文档由以下文本组成: “当片段加载动画时调用。” 就这样。没有关于参数的解释 这些参数意味着什么 基于代码和它的用法,它似乎可以让你定义自己的动画片段隐藏,显示,改变状态。然而,我从未见过它在真正的应用程序中的使用 关于参数:Android Fragment.onCreateAnimator()的文档在哪里?,android,documentation,Android,Documentation,该方法的整个文档由以下文本组成: “当片段加载动画时调用。” 就这样。没有关于参数的解释 这些参数意味着什么 基于代码和它的用法,它似乎可以让你定义自己的动画片段隐藏,显示,改变状态。然而,我从未见过它在真正的应用程序中的使用 关于参数: int transition-转换类型(常数,例如在中使用) 布尔输入-真如果是状态输入,则为假-否则 int transitionStyle-来自资源的样式id(该样式可能包含onCreateAnimator中缺少的动画) onCreateAnimator
-转换类型(常数,例如在中使用)李>int transition
-布尔输入
如果是状态输入,则为假-否则李>真
-来自资源的样式id(该样式可能包含int transitionStyle
中缺少的动画)李>onCreateAnimator
- onCreateAnimator的
方法很奇怪。 我看到的原型是:
public Animator onCreateAnimator(int-transit、boolean-enter、int-nextAnim)
-过渡类型,如桑德斯塔尔所述int transit
-如果输入为true,否则为false布尔输入
-即将播放的动画的资源ID。 例如,如果你试着翻牌 注意:上述示例中的R.id.container\u视图是包含您试图替换的现有片段的视图组的id。 执行上述代码时,将调用int nextAnim
方法,并且onCreateAnimator
参数将是传递到nextAnim
函数的四个动画ID之一,即R.animator.card\u right\u in,R.animator.card\u right\u out。。。等等 起初,这似乎不是很有用,因为它不会给您提供一个可以附加侦听器的实际Animator对象的引用。但奇怪的是,您可以直接从setCustomAnimations()
资源中膨胀另一个动画师,然后将侦听器附加到该资源,奇怪的是,这将在正确的时间触发所有重写的回调:nextAnim
@Override public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { Animator animator = null; // In this example, i want to add a listener when the card_flip_right_in animation // is about to happen. if (nextAnim == R.animator.card_flip_right_in) { animator = AnimatorInflater.loadAnimator(getActivity(), nextAnim); // * Sometimes onCreateAnimator will be called and nextAnim will be 0, // causing animator to be null. // * I wanted to add a listener when the fragment was entering - // your use case may be different. if (animator != null && enter) { animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { // Do something when the card flip animation begins } @Override public void onAnimationEnd(Animator animation) { // Do something as soon as the card flip animation is over } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); } } return animator; }
通过这种方式,您应该能够将侦听器添加到片段转换动画师中,就好像您自己创建了它们一样。由于深入了解了这一点,使用该方法的结果似乎可以提供一个想法。我在
方法的开头放了一个onCreateAnimator()
语句,发现在交换片段时,Log.d()
总是设置为transit
。@NathanOsman你在调用setTransit()吗在您的片段事务中?@JakeCataford我在片段中使用customAnimation并重写片段的OnAnimationCreate方法。即使使用setTransition方法,transit和nextAnim始终为零!我在片段中使用setCustomAnimations并重写片段的OnAnimationCreate方法。即使使用setTransition方法,transit和nextAnim始终为零!0
@Override public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { Animator animator = null; // In this example, i want to add a listener when the card_flip_right_in animation // is about to happen. if (nextAnim == R.animator.card_flip_right_in) { animator = AnimatorInflater.loadAnimator(getActivity(), nextAnim); // * Sometimes onCreateAnimator will be called and nextAnim will be 0, // causing animator to be null. // * I wanted to add a listener when the fragment was entering - // your use case may be different. if (animator != null && enter) { animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { // Do something when the card flip animation begins } @Override public void onAnimationEnd(Animator animation) { // Do something as soon as the card flip animation is over } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); } } return animator; }