使用毕加索的活动之间的共享过渡

问题描述 投票:1回答:1

使用Picasso异步加载图像时,我遇到共享转换问题。如果我使用一个简单的ImageView与drawable它会工作正常。

但是当我使用Picasso时,返回的动画不会正确缩放图像。

你可以更好地看到我在github repo中描述的问题:https://github.com/brunoperezm/SharedTransitionsAsync

代码,也可以在我的repo上看到,用于调用和被调用的活动如下:

main activity.Java

package com.example.sharedtransitionsasync;

import ...

public class MainActivity extends AppCompatActivity {
    ImageView imageView;
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//      getWindow().setSharedElementEnterTransition(new DetailsTransition());
        getWindow().setSharedElementReturnTransition(new DetailsTransition());


        imageView = findViewById(R.id.my_image_view1);
        Picasso.get()
                .load("https://i.redd.it/jb1okqafolg21.jpg")
                .fit()
                .into(imageView, new Callback() {
                    @Override
                    public void onSuccess () {
                        startPostponedEnterTransition();
                    }

                    @Override
                    public void onError (Exception e) {
                        startPostponedEnterTransition();
                    }
                });

    }

    public void gotoActivity2 (View view) {
        Intent intent = new Intent(this, Main2Activity.class);
        ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageView, "profile");
        startActivity(intent, optionsCompat.toBundle());
    }

    public class DetailsTransition extends TransitionSet {
        public DetailsTransition() {
            setOrdering(ORDERING_TOGETHER);
            addTransition(new ChangeBounds()).
                    addTransition(new ChangeTransform()).
                    addTransition(new ChangeImageTransform());
        }
    }

}

main2activity.Java

package com.example.sharedtransitionsasync;

import ...

public class Main2Activity extends AppCompatActivity {
    ImageView imageView;
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);


        getWindow().setSharedElementReturnTransition(new DetailsTransition());


        postponeEnterTransition();

        imageView = findViewById(R.id.my_image_view2);
        Picasso.get()
                .load("https://i.redd.it/jb1okqafolg21.jpg")
                .fit()
                .centerCrop()
                .into(imageView, new Callback() {
                    @Override
                    public void onSuccess () {
                        scheduleStartPostponedTransition(imageView);
                    }

                    @Override
                    public void onError (Exception e) {

                    }
                });
    }

    private void scheduleStartPostponedTransition(final View sharedElement) {
        sharedElement.getViewTreeObserver().addOnPreDrawListener(
                new ViewTreeObserver.OnPreDrawListener() {
                    @Override
                    public boolean onPreDraw () {
                        sharedElement.getViewTreeObserver().removeOnPreDrawListener(this);
                        startPostponedEnterTransition();
                        return true;
                    }
                });
    }

    @Override
    public void onBackPressed () {
        super.onBackPressed();
        supportFinishAfterTransition();
    }
    public class DetailsTransition extends TransitionSet {
        public DetailsTransition() {
            setOrdering(ORDERING_TOGETHER);
            addTransition(new ChangeBounds()).
            addTransition(new ChangeTransform()).
            addTransition(new ChangeImageTransform()).
            setDuration(5000);
        }
    }

}
android android-animation shared-element-transition
1个回答
0
投票

在你的两个xml中都在图像视图上使用这个scaleType

android:scaleType="centerCrop"

然后在毕加索调用这两个活动,删除.fit()和.centerCrop()

现在在你的git repo上工作得很好

© www.soinside.com 2019 - 2024. All rights reserved.