Я написал приложение для галереи под названием 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