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

Fragment.onCreateAnimator(int, boolean, int)方法的整个文档由以下文本组成:

“片段加载animation时调用”。

而已。 没有关于参数的解释。

这些参数是什么意思? 甚至源代码也不会透露太多。

  • 我如何知道捆绑包中提供了哪些数据?
  • 如何在Eclipse中获取Android API文档
  • 我在哪里可以下载Android SDK文档?
  • 我们如何在Android中打开像ppt,doc,pps,rtf等文件?
  • Android Studio文档自动popup问题
  • Android资源中的样式文档
  • setUseWideViewPort()和setLoadWithOverviewMode()是做什么的?
  • 有关布局别名的Android文档不正确?
  • onCreateAnimator方法很奇怪。 我见过的原型是这样的:

    public Animator onCreateAnimator(int transit, boolean enter, int nextAnim)

    int transit – 过渡types,正如桑斯塔尔所说的那样

    boolean enter – 如果input,则为true,否则为false

    int nextAnim即将播放的animation的资源ID。

    所以,举个例子,如果你尝试做一个卡片翻转, 从文档 :

     // Create and commit a new fragment transaction that adds the fragment for the back of // the card, uses custom animations, and is part of the fragment manager's back stack. BackOfCardFragment backFragment = new BackOfCardFragment(); getFragmentManager() .beginTransaction() // Replace the default fragment animations with animator resources representing // rotations when switching to the back of the card, as well as animator // resources representing rotations when flipping back to the front (eg when // the system Back button is pressed). .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 any fragments currently in the container view with a fragment // representing the next page (indicated by the just-incremented currentPage // variable). .replace(R.id.container_view, backFragment) // Add this transaction to the back stack, allowing users to press Back // to get to the front of the card. .addToBackStack(null) // Commit the transaction. .commit(); 

    注意:上例中的R.id.container_view是包含您要replace的现有片段的ViewGroup的ID。

    当上面的代码被执行时, onCreateAnimator方法将被调用, nextAnim参数将是传递给setCustomAnimations()函数的四个animationID之一,即R.animator.card_flip_right_in,R.animator.card_flip_right_out …等。

    这一开始看起来并不是很有用,因为它不会给你一个可以附加一个监听器的实际Animator对象的引用。 但奇怪的是,您可以直接从nextAnim资源中直接膨胀另一个Animator,然后将侦听器附加到该侦听器上,奇怪的是,它会在正确的时间触发所有重写的callback:

     @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; } 

    通过这种方式,您应该可以将侦听器添加到片段转换animation师,就像您自己创build了侦听器一样。

    基于FragmentManager代码和FragmentManagerImpl.loadAnimator(android.app.Fragment,int,boolean,int)的用法,似乎Fragment.onCreateAnimator(int,boolean,int)可以让你为片段隐藏,显示,改变状态定义自己的animation。 但是,我从来没有见过在真正的应用程序中使用它。

    关于参数:

    • int transit – 转换types(常量FragmentTransaction ,例如在这里使用 );
    • boolean enter – 如果是状态input则为true,否则为false;否则为false。
    • int transitionStyle – 来自资源的样式ID(该样式可能包含从onCreateAnimator丢失的animation);