【问题标题】:Understanding Window#getSharedElementTransition()了解窗口#getSharedElementTransition()
【发布时间】:2016-09-29 22:14:08
【问题描述】:

我有两个活动 AB,它们有一个 SharedElement。如果Activity A 启动Activity B 并监听转换,则退出和重新进入的监听器都会被调用。

这里是调用Activity A的代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        getWindow().getSharedElementReenterTransition().addListener(new Transition.TransitionListener() {
            @Override
            public void onTransitionStart(Transition transition) {
                Log.i("Log", "A REENTER");
            }

            ...
        });

        getWindow().getSharedElementExitTransition().addListener(new Transition.TransitionListener() {
            @Override
            public void onTransitionStart(Transition transition) {
                Log.i("Log", "A EXIT");
            }

           ...
        });

        getWindow().getSharedElementEnterTransition().addListener(new Transition.TransitionListener() {
            @Override
            public void onTransitionStart(Transition transition) {
                Log.i("TestApp", "A ENTER");


            }

            ...
        });
        getWindow().getSharedElementReturnTransition().addListener(new  Transition.TransitionListener() {
            @Override
            public void onTransitionStart(Transition transition) {
                Log.i("TestApp", "A RETURN");
            }

            ...
        });


    }

    public void onClick(View v){
        Intent intent = new Intent(this, Act2.class);
        Pair<View, String> pair1 = Pair.create(findViewById(R.id.textView), findViewById(R.id.textView).getTransitionName());
        ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1);
        startActivity(intent, options.toBundle());
    }
}

如果我现在执行onClick()(启动Activity B)然后点击返回按钮返回Activity A,日志将如下:

A REENTER
A EXIT
B ENTER
B RETURN
B ENTER
B RETURN
A REENTER
A EXIT

我希望它是

A EXIT
B ENTER
B RETURN
A REENTER

【问题讨论】:

    标签: android shared-element-transition


    【解决方案1】:

    默认情况下,退出和重新进入转换以及进入和返回转换都使用相同的转换。如果您明确设置它们,它们将是不同的。

    我相信您正在向同一个转换添加侦听器,因此它们都被调用了。

    【讨论】:

    • 非常感谢。即使我读了几次,如果没有明确设置它们是相同的,我没想到两个听众都会被调用。看起来很奇怪
    【解决方案2】:

    我遇到了类似的问题,发现了similar question

    Lollipop 中存在一个错误,如果共享元素返回转换的时间比重新进入的时间长,则该错误会导致中断 过渡持续时间。如果您调整重新进入过渡持续时间 (在调用活动上),应该可以解决中断问题。

    您最好使用 enterreturn 共享元素过渡。

    【讨论】:

    • 我的转换只包含上面的代码。所以他们不应该花很长时间。如果我需要在 onExit 和 onReenter 期间做不同的事情,这对我有什么帮助? [我调整了原帖,以提供更多信息。 ]
    猜你喜欢
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 2015-02-11
    • 2016-04-08
    相关资源
    最近更新 更多