如何知道一项活动是否在没有过渡的情况下开始?

Roy*_*erg 16 android android-animation android-transitions

我有一个用例,我主要通过转换开始一个活动,但从导航抽屉打开它时不是这种情况.

为了保持过渡顺利,我有一个Transition.TransitionListener在转换完成时触发一些UI更新.

所以我有这样的事情:

public class SomeActivity extends Activity {

    public void onCreate(Bundle savedInstanceState){ 
        // ...
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition();
            sharedElementEnterTransition.addListener(new Transition.TransitionListener() {
                // ...
                @Override
                public void onTransitionEnd(Transition transition) {
                    doSomeUiUpdating();
                }
            });
        } else { // Pre-Lollipop
            doSomeUiUpdating();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这种运作良好,开始与动漫活动的时候,但我怎么能知道,如果活动未经过渡开始,这样我可以打电话doSomeUiUpdating()

我敢肯定,必须有一个简单的方法Activity,Window,Transition或地方,我都忽略了.我不想在调用Activity上中继设置一些告诉动画是否显示的包.

Pr3*_*38y 4

您可以尝试onTransitionStart设置TransitionListener一些布尔值isAnimationStarted

public class SomeActivity extends Activity {

    private boolean isAnimationStarted = false;

    public void onCreate(Bundle savedInstanceState) { 
        // ...
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition();
            sharedElementEnterTransition.addListener(new Transition.TransitionListener() {
                // ...
                @Override
                public void onTransitionEnd(Transition transition) {
                    doSomeUiUpdating();
                }

                @Override
                public void onTransitionStarted(Transition transition) {
                    isAnimationStarted = true;
                }
            });
        }
    }

    public void onStart() {
        if (!isAnimationStarted) {
            doSomeUiUpdating();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 事实上,我刚刚测试了它,正如我所说的那样 - 在我的例子中, onStart 总是在任何回调之前被调用,所以 isAnimationStarted 总是 false 。因此,此方法当然无助于确定活动是否是在有/没有转换的情况下启动的。 (3认同)