1

我在两个活动之间使用爆炸过渡。我想设置爆炸效果,使其他视图远离被触摸的视图。EpicenterCallback似乎适合这个目的,但我无法让我的过渡真正触发 onGetEpicenter。我究竟做错了什么?

这是我必须设置回调并开始转换的方法:

public void Explode(View view) {
    Explode explode = new Explode();
    explode.setEpicenterCallback(new MyEpicenterCallback(view));
    getWindow().setExitTransition(explode);

    Intent intent = new Intent(this, MainActivity.class);
    ActivityOptions transitionActivityOptions =
            ActivityOptions.makeSceneTransitionAnimation(MainActivity.this);
    startActivity(intent, transitionActivityOptions.toBundle());
}

...这是我创建的回调:

public class MyEpicenterCallback extends Transition.EpicenterCallback {
    View epicenterView;

    public MyEpicenterCallback(View view) {
        epicenterView = view;
    }

    @Override
    public Rect onGetEpicenter(Transition transition) {
        return new Rect(epicenterView.getLeft(), epicenterView.getTop(), epicenterView.getRight(), epicenterView.getBottom());
    }
}

onGetEpicenter 永远不会被调用。谢谢参观!

4

1 回答 1

0

我也觉得很奇怪。看起来震中回调在ActivityTransitionCoordinator.java中被覆盖,您对此无能为力。

一种有点肮脏的解决方法是阻止更改,例如:

explode = new Explode() {
    {
        super.setEpicenterCallback(new Transition.EpicenterCallback() {
            @Override
            public Rect onGetEpicenter(Transition transition) {
                return epicenter;
            }
        );
    }

    @Override
    public void setEpicenterCallback(EpicenterCallback epicenterCallback) {
    }
};

getWindow().setExitTransition(explode);

Epicenter 是您的活动中的一个 Rect 字段,您可以在调用 startActivity 之前设置它。

于 2016-01-24T04:33:03.437 回答