Android Fragment.onCreateAnimator()的文档在哪里?

Android Fragment.onCreateAnimator()的文档在哪里?,android,documentation,Android,Documentation,该方法的整个文档由以下文本组成: “当片段加载动画时调用。” 就这样。没有关于参数的解释 这些参数意味着什么 基于代码和它的用法,它似乎可以让你定义自己的动画片段隐藏,显示,改变状态。然而,我从未见过它在真正的应用程序中的使用 关于参数: int transition-转换类型(常数,例如在中使用) 布尔输入-真如果是状态输入,则为假-否则 int transitionStyle-来自资源的样式id(该样式可能包含onCreateAnimator中缺少的动画) onCreateAnimator

该方法的整个文档由以下文本组成:

“当片段加载动画时调用。”

就这样。没有关于参数的解释

这些参数意味着什么

基于代码和它的用法,它似乎可以让你定义自己的动画片段隐藏,显示,改变状态。然而,我从未见过它在真正的应用程序中的使用

关于参数:

  • int transition
    -转换类型(常数,例如在中使用)
  • 布尔输入
    -
    如果是状态输入,则为假-否则
  • int transitionStyle
    -来自资源的样式id(该样式可能包含
    onCreateAnimator
    中缺少的动画)
      onCreateAnimator的
      方法很奇怪。
      我看到的原型是:

      public Animator onCreateAnimator(int-transit、boolean-enter、int-nextAnim)

      int transit
      -过渡类型,如桑德斯塔尔所述

      布尔输入
      -如果输入为true,否则为false

      int nextAnim
      -即将播放的动画的资源ID。

      例如,如果你试着翻牌

      注意:上述示例中的R.id.container\u视图是包含您试图替换的现有片段的视图组的id。

      执行上述代码时,将调用
      onCreateAnimator
      方法,并且
      nextAnim
      参数将是传递到
      setCustomAnimations()
      函数的四个动画ID之一,即R.animator.card\u right\u in,R.animator.card\u right\u out。。。等等

      起初,这似乎不是很有用,因为它不会给您提供一个可以附加侦听器的实际Animator对象的引用。但奇怪的是,您可以直接从
      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
      总是设置为
      0
      。@NathanOsman你在调用setTransit()吗在您的片段事务中?@JakeCataford我在片段中使用customAnimation并重写片段的OnAnimationCreate方法。即使使用setTransition方法,transit和nextAnim始终为零!我在片段中使用setCustomAnimations并重写片段的OnAnimationCreate方法。即使使用setTransition方法,transit和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;
      }