我在两个活动之间使用爆炸转换。我想设置爆炸效果,以便其他视图远离触摸的视图。 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。谢谢你看看!
答案 0 :(得分: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之前设置该字段。