Изображение перехода общего элемента перепрыгивает при выходе из перехода - PullRequest
0 голосов
/ 20 февраля 2020

Я искал повсюду причину этой проблемы и применил большинство решений, которые нашел в Интернете, но мне не повезло.

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

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

Так что-то вроде этого: Activity1 / ViewPager / RecyclerView / Item / Image -> Activity2 / Fragment / Image

Работает прекрасно из Activity1 в Activity2, но когда происходит анимация выхода, изображение прыгает вниз, как половина изображение и приземляется в Деятельности на половину изображения вниз, так что это выглядит действительно неуклюже.

Здесь есть некоторые фрагменты кода:

recyclerview_item. xml

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

<LinearLayout
    android:id="@+id/product_container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    android:clickable="true"
    android:focusable="true"
    android:foreground="?android:attr/selectableItemBackground"
    android:orientation="vertical">

    <RelativeLayout
        android:background="@drawable/bordered_image"
        android:padding="2dp"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/product_image"
            android:layout_width="match_parent"
            android:layout_height="140dp"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            android:src="@drawable/default_item" />
    </RelativeLayout>

    <TextView
        android:id="@+id/product_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:gravity="center"
        android:textColor="@color/black"
        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/product_price"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="16sp" />

</LinearLayout>

Я открываю действие следующим образом:

val options = ActivityOptions
    .makeSceneTransitionAnimation(this, sharedImage, sharedImage.transitionName)
startActivity(intent, options.toBundle())

Вот так я обрабатываю модальное действие

    requestWindowFeature(Window.FEATURE_NO_TITLE)
    window.setBackgroundDrawableResource(R.drawable.rounded_dialog)
    window.setLayout(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.WRAP_CONTENT
    )

И внутри onCreateView фрагмента я добавляю это

image.transitionName = "image_${mItem.id}"
image.loadUrl(mItem.image)
startPostponedEnterTransition()

И для показа изображения я использую glide

private fun ImageView.loadUrl(url: String) {
    val options = RequestOptions()
    Glide.with(context)
        .load(url)
        .apply(
            options.transforms(
                CenterCrop(),
                RoundedCorners(150)
            )
        )
        .into(this)
}

Вот как изображение возвращается к упражнению 1:

enter image description here

РЕДАКТИРОВАТЬ: Итак, я нашел проблему. Я использую собственный стиль для диалога активности. В манифесте android я добавляю это к действию:

<activity android:name=".activities.Activity2"
    android:theme="@style/AppTheme.ActivityDialog"/>

И стиль таков:

<style name="AppTheme.ActivityDialog" parent="Theme.AppCompat.DayNight.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowContentTransitions">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@color/white</item>
</style>

Это как-то нарушает анимацию

1 Ответ

0 голосов
/ 20 февраля 2020

Итак, я обнаружил, в чем проблема:

Переход активности работает следующим образом. Когда вы начинаете второе занятие, оно отображается поверх первого с прозрачным фоном. Общие элементы> позиционируются так же, как в первом упражнении, а затем анимируются в правильную> позицию, указанную во втором упражнении.

В вашем случае вы используете android: theme = "@ style /Theme.AppCompat.Dialog ", что означает, что> размер области рисования второго действия меньше, чем у первого> действия. Это объясняет отсечение и отсутствие перехода при щелчке снаружи.

Я изменил тему Activity2 следующим образом:

<style name="AppTheme.ActivityDialog" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

И добавил просмотр карты в макет упражнения 2 и теперь работает

...