如何知道一项活动是否在没有过渡的情况下开始? [英] How can one know if an activity is started without a transition?

查看:113
本文介绍了如何知道一项活动是否在没有过渡的情况下开始?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用例,其中我通常以过渡开始活动,但是从导航抽屉中打开活动时并非如此.

I have a use case where I mostly start an activity with a transition, but that's not the case when opening it from the navigation drawer.

为了保持过渡的顺利进行,我有一个Transition.TransitionListener,当过渡完成时,我会在其中触发一些UI更新.

To keep the transition smooth I have a Transition.TransitionListener in which I trigger some UI updating when the transition is done.

所以我有这样的东西:

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();
        }
    }
}

使用动画启动活动"时效果很好,但是如何知道活动是否在没有过渡的情况下启动,以便我可以调用doSomeUiUpdating()?

This works well when starting the Activity with the animation, but how can I know if the Activity was started without a transition so that I can call doSomeUiUpdating()?

我确定在ActivityWindowTransition或我忽略的某个地方必须有一个简单的方法.我不想继续在调用Activity上设置一些捆绑,以告知动画是否正在显示.

I'm sure there must be a simple method in Activity, Window, Transition or somewhere that I have overlooked. I don't want to relay on the calling Activity to set some bundle that telling if the animation is showing or not.

推荐答案

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

You can try onTransitionStart of TransitionListener to set some boolean 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();
        }
    }

}

这篇关于如何知道一项活动是否在没有过渡的情况下开始?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆