Переход общих элементов отличается по активности от фрагмента - PullRequest
0 голосов
/ 17 октября 2018

Я написал приложение для галереи под названием Pholder .Это типичное поведение, когда вы нажимаете на миниатюру в GalleryActivity, она будет отображаться увеличенной в SlideshowActivity, используя ChangeBounds, ChangeImageTransform и ChangeClipBounds.Gif здесь .Это срабатывает через

val option = ActivityOptionsCompat.makeSceneTransitionAnimation(this, *pair.toTypedArray())
ActivityCompat.startActivityForResult(this, intent, REQUEST_SLIDESHOW_ACTIVITY, option.toBundle())

И sharedElementEnterTransition устанавливается в SlideshowActivity через завышенный xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together">
    <changeBounds android:interpolator="@android:interpolator/fast_out_slow_in" />
    <changeImageTransform android:interpolator="@android:interpolator/fast_out_slow_in" />
    <changeClipBounds />
</transitionSet>

, когда Android движется к навигации (один фрагмент действия), IЯ подумал, что было бы хорошо использовать вместо SlideshowFragment.Применяя точно такие же переходы, я получаю этот эффект вместо этого, где стержень расширения находится не от самого центра, а сверху слева.Gif здесь .Это вызывается с помощью

imageView.setOnClickListener {
    activity!!.supportFragmentManager.beginTransaction()
            .setReorderingAllowed(true)
            .addSharedElement(imageView, "transitionName")
            .replace(R.id.container, SlideshowFragment())
            .addToBackStack("SlideshowFragment")
            .commit()
}

В обоих случаях миниатюра определила xml android:scaleType="centerCrop", в то время как слайд-шоу имеет xml android:scaleType="fitCenter".Кроме того, они имеют одинаковый код GlideApp.

GlideApp.with(activity!!)
        .load(filePath)
        .listener(object : RequestListener<Drawable> {
            override fun onLoadFailed(
                    e: GlideException?, model: Any?,
                    target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
                startPostponedEnterTransition()
                return false
            }

            override fun onResourceReady(
                    resource: Drawable?, model: Any?,
                    target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
                startPostponedEnterTransition()
                return true
            }
        })
        .into(imageView)

Я знаю, как использовать общие элементы, так что я думаю, что это просто вопрос аниматора, который не реализован правильно?Целевой API 21 и выше.Я хочу узнать о причине этого !!Спасибо.

Примечание:

В моем тесте на фрагменты это просто.

Activity --> ThumbnailFragment --> ImageView
Activity --> SlideshowFragment (replaces ThumbnailFragment) --> ImageView

В исходном упражнении структура более сложная.

GalleryActivity --> ViewPager --> TabFragment --> GalleryFragment --> RecyclerView --> ImageView
(file path will go one level deeper by replacing GalleryFragment when a folder is clicked)

SlideshowActivity --> ViewPager --> SlideshowFragment --> ImageView
...