共享元素过渡的活动性与片段性不同

时间:2018-10-17 18:03:06

标签: android android-fragments android-activity android-transitions shared-element-transition

我写了一个名为Pholder的图库应用。它具有一种典型的行为,当您单击oldPassword中的缩略图时,将使用GalleryActivitySlideshowActivityChangeBoundsChangeImageTransform中放大显示。 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

0 个答案:

没有答案
相关问题