5

共有要素の移行がスムーズに行えるように、私はターゲットアクティビティで重い初期化を延期する必要があります。この活動は、Deep linkまたは要素を共有していない別のアクティビティから開始された場合は、しかし、アクティビティ共有要素の移行が実行されることをどのように知ることができますか?

getWindow().setSharedElementEnterTransition(enterTransition); 
enterTransition.addListener(new Transition.TransitionListener() { 
    @Override 
    public void onTransitionEnd(Transition transition) { 
     init(); 
    } 
}); 

:以下のコードを参照してください。移行は決して開始されないので、onTransitionEnd()は呼び出されず、init()は実行されません。その場合は、アクティビティの開始直後にinit()に電話する必要があります。

移行が実行されることをどのように知ることができますか?共有要素の遷移が利用できない場合


EDIT は、私はまた、別のトランジションを入力し実行したいです。ですので、私の場合はpostponeEnterTransition()を使ってもうまくいきません。

答えて

0

受信アクティビティのonCreate(または他の場所)でpostponeEnterTransition()を呼び出し、その呼び出しの後に重いinit()を実装し、明示的にstartPostponedEnterTransition initが実行されます。 DeepLinkなどのアクティビティを開始するために必要な共有遷移がない場合、遅延のない重いinitにまっすぐに進みます。ここ

コードである: - 開始共有要素転移

Intent ActivityDemoOneBIntent = new Intent(ActivityDemo1A.this, ActivityDemo1B.class); 
String transitionName = getString(R.string.activityTransitionName); 
Bundle optionsBundle = getTransitionOptionsBundle(imageViewAnimated, transitionName); 
startActivity(ActivityDemoOneBIntent, optionsBundle); 

アクティビティB -

アクティビティA共有要素転移 "受信"

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_demo_1_b); 
    postponeTransition(); // postpone shared element transition until we release it explicitly 

    // Do all heavy processing here, activity will not enter transition until you explicitly call startPostponedEnterTransition() 

    // all heavy init() done 
    startPostponedTransition() // release shared element transition. This can be placed to your listeners as well. 
} 

private void postponeTransition() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     postponeEnterTransition(); 
    } else { 
     ActivityCompat.postponeEnterTransition(this); 
    } 
} 

private void startPostponedTransition() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     startPostponedEnterTransition(); 
    } else { 
     ActivityCompat.startPostponedEnterTransition(this); 
    } 
} 
関連する問題