Android совместно используемый вид перехода в сочетании с переходом затухания

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

Теперь для других элементов в Activity я бы хотел добавить анимацию исчезновения. Теперь это работает для всех элементов, кроме представлений в той же группе, что и ImageView (общий вид).

Мой макет ниже. ImageView находится внутри CollapsingToolbarLayout и AppBarLayout, и я настроил переход замирания следующим образом в oncreate:

    getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
    super.onCreate(savedInstanceState);

    Fade fade = new Fade(Fade.IN);
    fade.setDuration(4000);

    getWindow().setEnterTransition(fade);
    setContentView(R.layout.article_details);

Планировка:

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/article_details_collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginEnd="10dp"
        app:expandedTitleMarginStart="10dp"
        app:expandedTitleTextAppearance="@style/title_text_appearence"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            android:id="@+id/article_details_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            android:transitionName="imageTrans"
            app:layout_collapseMode="parallax"
            app:layout_collapseParallaxMultiplier="0.6"
             />


        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:theme="@style/AppTheme.ToolBar"
            android:background="#0000"
            app:layout_collapseMode="pin"
             />

    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:transitionGroup="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <WebView
        android:id="@+id/article_details_webview"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</android.support.v4.widget.NestedScrollView>

<android.support.design.widget.FloatingActionButton
    app:fabSize="mini"
    app:layout_anchor="@id/appbar"
    app:layout_anchorGravity="bottom|right|end"
    android:src="@drawable/star_white"
    android:layout_marginRight="16dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Итак, подведем итоги. Вложенный макет прокрутки и его веб-представление отображаются как настроенные, но другие представления в AppBarLayout - нет. ImageView в AppBarLayout ведет себя так, как должен делиться общий элемент (перемещаясь на место из проходящего Activity). Кроме того, только половина FloatingActionButton затухает, остальные появляются на месте после 4-х секундного затухания.

Изменить: Я на самом деле испытываю ту же проблему, что и этот парень: переходы содержимого поверх общих элементов в Android

1 ответ

Решение

Я нашел решение этой "проблемы". Проблема в том, что это предполагаемое поведение. Вы можете отключить перекрытие, позвонив

getWindow().setSharedElementsUseOverlay(false);`

Но это чаще всего создает артефакты. Я закончил тем или иным способом и удалил фон в своей деятельности с прозрачной темой:

<style name="Theme.Transparent" parent="@style/AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

Так как моей целью было добавить текст в CollapsingToolbarLayout, я не смог добиться этого, так как ImageView является дочерним элементом макета. В итоге я добавил еще один ImageView с тем же изображением, что и анимация между действиями, и затем добавил его вместе с CollapsingToolbarLayout после того, как был выполнен переход общего элемента Activity. Поскольку изображение общего элемента уже было на месте, новый ImageView не имеет никакого значения в пользовательском интерфейсе. Решение, конечно, не оптимальное, но единственное для моей проблемы - учитывая поведение API. При выходе из действия я просто скрываю замену ImageView, и пользователь видит, как изображение общего элемента переводится на место в родительском действии.

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