web-dev-qa-db-ja.com

Android:アクティビティ間の共有要素の移行を高速化

次のように機能する2つのアクティビティ間で共有要素の遷移があります。

Intent someintent = new Intent(this, someclass.class);

        if (Build.VERSION.SDK_INT >= 21) {

            ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this
                    , new Pair<>(viewClicked.findViewById(R.id.someimage), "someimage")
                    , new Pair<>(viewClicked.findViewById(R.id.someicon), "someicon")
            );
            startActivity(someintent, options.toBundle());
        }
        else {
            startActivity(someintent);
        }

これは問題なく機能しますが、移行は非常に遅いです。画像が最初にクリックされたとき、遷移が行われる前に1、2秒停止しているように見えます。これは、ロードされているアクティビティの「重み」が原因ですか、それとも遅延を構成できますか?

16
Jon

enterTransitionreturntransitionの期間を変更してみましたか。

    private Transition enterTransition() {
        ChangeBounds bounds = new ChangeBounds();
        bounds.setDuration(2000);

        return bounds;
    }

    private Transition returnTransition() {
        ChangeBounds bounds = new ChangeBounds();
        bounds.setInterpolator(new DecelerateInterpolator());
        bounds.setDuration(2000);

        return bounds;
    }

そしてonCreate

getWindow().setSharedElementEnterTransition(enterTransition());
getWindow().setSharedElementReturnTransition(returnTransition());
20
Alexander

すでにトランジションをスタイルに設定している人を助けるかもしれない別の方法:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    getWindow().getSharedElementEnterTransition().setDuration(2000);
    getWindow().getSharedElementReturnTransition().setDuration(2000)
        .setInterpolator(new DecelerateInterpolator());
}
16
Codeversed