Я искал повсюду причину этой проблемы и применил большинство решений, которые нашел в Интернете, но мне не повезло.
Вот ситуация, у меня есть два вида деятельности, один с виджером с обзором переработчика внутри каждой вкладки. Когда я щелкаю один из элементов в обзоре переработчика, он открывает модальное действие с целевым переходным изображением внутри фрагмента.
Таким образом, изображение расширяется от элемента просмотра переработчика до модального изображения действия
Так что-то вроде этого: 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:
РЕДАКТИРОВАТЬ: Итак, я нашел проблему. Я использую собственный стиль для диалога активности. В манифесте 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>
Это как-то нарушает анимацию