Переход к общему элементу с миганием

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

Intent myIntent = new Intent(getActive, EnlargeActivity.class);
            myIntent.putExtra("IMAGE_URL", imageArrayList.get(position).getUrl());
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                holder.iv.setTransitionName(String.valueOf(MainActivity.position + "ZoomImage"));
                ActivityOptionsCompat options = ActivityOptionsCompat.
                        makeSceneTransitionAnimation(getActive,
                                holder.iv,
                                ViewCompat.getTransitionName(holder.iv));

                context.startActivity(myIntent, options.toBundle());

в действии у него есть viewpager:

 super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_enlarge);


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setEnterTransition(null);
    }

    supportPostponeEnterTransition();

В адаптере viewpager, который расширяет FragmentStatePagerAdapter, возвращая фрагмент ProductDetailViewPagerFragment, который имеет изображение и загружает изображения следующим образом: (MainActivity.position - это позиция recyclerview)

Picasso.with(getActivity())
            .load(url)
            .into(imageView, new Callback() {
                @Override
                public void onSuccess() {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        imageView.setTransitionName(MainActivity.position + "ImageZoom");
                    }

                    getActivity().supportStartPostponedEnterTransition();
                }

                @Override
                public void onError() {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        imageView.setTransitionName(MainActivity.position + "ImageZoom");
                    }

                    getActivity().supportStartPostponedEnterTransition();
                }
            });

Вместо вызова setTransitionName после успешной загрузки Пикассо. Вызовите его, когда ImageView будет создан в вашем адаптере ViewPager

Tam Huynh 22.05.2018 11:32

хорошо, пытаюсь, а как насчет этого: getActivity (). supportStartPostponedEnterTransition (); это не так?

blackHawk 22.05.2018 11:34

это правильно, отложите и дождитесь загрузки изображения, затем начните снова - это правильный путь

Tam Huynh 22.05.2018 11:35

так что мне все еще нужно «Вызовите его, когда ImageView будет создан в вашем адаптере ViewPager»?

blackHawk 22.05.2018 11:36

Нет разницы...

blackHawk 22.05.2018 11:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
372
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вам следует установитьTransitionName для ViewPager во втором действии. Предыдущее представление будет связано с viewPager. Если вы позвоните

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    imageView.setTransitionName(MainActivity.position + "ImageZoom");
  }

после успешной (или неудачной) загрузки изображения переход завершен и работать не будет.

как насчет этого: getActivity (). supportStartPostponedEnterTransition (); Я отложил, а затем, когда загрузка изображения начала переход

blackHawk 22.05.2018 11:18

Другие вопросы по теме