我写了一个名为Pholder的图库应用。它具有一种典型的行为,当您单击oldPassword
中的缩略图时,将使用GalleryActivity
,SlideshowActivity
和ChangeBounds
在ChangeImageTransform
中放大显示。 Gif here。这是通过
ChangeClipBounds
然后通过膨胀的
在val option = ActivityOptionsCompat.makeSceneTransitionAnimation(this, *pair.toTypedArray())
ActivityCompat.startActivityForResult(this, intent, REQUEST_SLIDESHOW_ACTIVITY, option.toBundle())
中设置sharedElementEnterTransition
SlideshowActivity
随着android转向导航(单个活动的多个片段),我认为最好使用<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>
代替。应用完全相同的过渡,我得到的效果是,扩展的支点不是来自中心本身,而是来自左上角。 Gif here。这是通过
SlideshowFragment
在两种情况下,缩略图都定义了xml imageView.setOnClickListener {
activity!!.supportFragmentManager.beginTransaction()
.setReorderingAllowed(true)
.addSharedElement(imageView, "transitionName")
.replace(R.id.container, SlideshowFragment())
.addToBackStack("SlideshowFragment")
.commit()
}
,而幻灯片放映中定义了xml android:scaleType="centerCrop"
。而且,它们具有相同的android:scaleType="fitCenter"
代码。
GlideApp
我知道如何使用共享元素,所以我认为这只是动画制作者没有正确实现的问题?目标API 21及更高版本。我很想知道这背后的原因!谢谢。
注意:
在测试碎片时,它很简单。
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)
在原始活动中,结构更加复杂。
Activity --> ThumbnailFragment --> ImageView
Activity --> SlideshowFragment (replaces ThumbnailFragment) --> ImageView