我有一个用例,我主要通过转换启动一个活动,但从导航抽屉打开它时不是这种情况。
为了保持过渡顺利,我有一个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();
}
}
}
这在使用动画启动活动时效果很好,但如何知道活动是否在没有转换的情况下启动,以便我可以调用doSomeUiUpdating()
?
我确信在Activity
,Window
,Transition
或某个我忽略的地方必须有一个简单的方法。我不想在调用Activity上中继设置一些告诉动画是否显示的包。
答案 0 :(得分: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();
}
}
}
答案 1 :(得分:2)
由于您正在开始Activity
,因此您将使用Intent
启动它。您可以向Intent
添加额外内容,并在被叫onCreate()
的{{1}}中进行检查。
我们假设我们有2项活动 - Activity
和ActivityA
。
现在,我们假设ActivityB
是调用ActivityA
,而Activity
是被调用的ActivityB
。
在Activity
中,我们假设您已经编写了一些代码,以ActivityA
启动ActivityB
。
SharedElementTransition
现在,如果您注意到上述情况,我已使用@Override
public void onClick(View v) {
Intent startActivityBIntent = new Intent(getContext(), ActivityB.class);
startActivityBIntent.putExtra("IS_SHARED_ELEMENT_TRANSITION_ENABLED", true);
ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), view, ViewCompat.getTransitionName(view));
startActivity(startActivityBIntent, activityOptionsCompat);
}
方法通过了Intent
个额外内容。我已经传递了putExtra()
值为true,因为我打算用Boolean
启动活动。
现在在SharedElementTransition
的{{1}}方法中,您只需检查传递给ActivityB
的布尔值。如果您传递了false,那么您可以添加条件语句并在那里执行UI更新。我已经在下面给你一个小片段来帮助你开始:
onCreate()
这样做的好处是,您可以完全控制内容过渡的方式以及共享元素过渡的效果。