Общий переход между действиями с использованием Пикассо

1

У меня проблема с общими переходами при использовании Picasso для асинхронной загрузки изображений. Если бы я использовал простой ImageView с отрисовкой, он бы работал нормально.

Однако, когда я использую Picasso, возвращающаяся анимация не масштабирует изображение должным образом.

Вы можете лучше увидеть проблему, которую я описал в моем репозитории на github: https://github.com/brunoperezm/SharedTransitionsAsync

Код, который также можно увидеть в моем репо для активности вызова и вызова, выглядит следующим образом:

MainActivity.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-animation
shared-element-transition

1 ответ

0

в обоих ваших xml используйте этот scaleType на изображениях

android:scaleType="centerCrop"

затем на вызовах Пикассо для обоих действий удалите .fit() и .centerCrop()

теперь отлично работает на вашем git репо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню