Проблема с переносом общих элементов в Samsung Nougat 7.0

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

Переход отлично работает на эмуляторе Android, моем Pixel и телефонах Samsung, которые не были обновлены до Nougat 7.0. На устройстве Samsung с версией 7.0 изображение и текст внутри контейнера не анимируются должным образом. В моем примере приложения верхний контейнер - это тот контейнер, который вызывает проблемы на устройствах Samsung, а нижний - это то, как он должен выглядеть все время. Вот как это выглядит на устройстве Samsung.

Глядя на код, вы можете спросить, почему бы просто не воспользоваться вторым решением, состоящим только в анимации контейнера и, в свою очередь, в анимации внутренних компонентов с его помощью. Я видел, что с некоторыми макетами Android просто не анимирует внутренности правильно, иногда даже совсем. Итак, я прибег к указанию каждого представления, которое будет переходом общего элемента. Кто-нибудь еще сталкивался с этой проблемой?


person Meefle    schedule 08.05.2017    source источник
comment
Что ж, после многих часов исследований я наконец понял, что происходит. Я добавил несколько операторов журнала к обратным вызовам общих элементов в этой фиксации. В этом коммите также есть исправление проблемы.   -  person Meefle    schedule 10.05.2017
comment
Оказывается, в целевом действии onSharedElementStart координаты дочернего представления соответствуют его родительскому, а не корню. На эмуляторах Android, моем Pixel или устройстве Samsung до Nougat у него правильные координаты относительно корня. На устройстве Samsung Nougat его координаты по-прежнему относительно его родительского.   -  person Meefle    schedule 10.05.2017


Ответы (1)


Я столкнулся с той же проблемой с устройствами Samsung, хотя я не тестировал Nougat по сравнению с предыдущими операционными системами.

Если возможно, попробуйте выполнить переход только ViewGroup без атрибута transitionName в TextView.

<LinearLayout
    ...
    android:transitionName="ViewGroupTransition">

    <!-- No transitions on the TextViews -->
    <TextView
        android:id="@+id/my_text_view1"
        ...
        />

    <TextView
        android:id="@+id/my_text_view2"
        ...
        />

</LinearLayout>

Добавление transitionNames в TextViews здесь приводит к тому, что переход работает некорректно, как вы описали. TransitionNames не требуется для завершения перехода между TextView, если аналогичные TextView присутствуют в целевом представлении перехода.

person Ben Christians    schedule 22.08.2018