首页 > 解决方案 > 为共享元素回调添加侦听器而不更改视图可见性

问题描述

我在两个活动之间使用共享元素转换。第二个活动由包含片段的视图寻呼机组成。我想在共享元素过渡结束时进行进一步的更改。这是回调:

setEnterSharedElementCallback(
        object : SharedElementCallback() {
            override fun onMapSharedElements(
                names: MutableList<String>,
                sharedElements: MutableMap<String, View>
            ) {
                val keySharedElementView = sharedElements[videoPath[currentPosition]]
                if (keySharedElementView != null) {
                    Log.i("KSEV", "Not Null")
                    ViewCompat.animate(keySharedElementView)
                        .setListener(object : ViewPropertyAnimatorListenerAdapter() {
                            override fun onAnimationEnd(view: View?) {
                                super.onAnimationEnd(view)
                                Log.i("KSEV","Ended")
                                runOnUiThread { k 
                                   videoThumb.visibility = GONE
                                    if (videoThumb.visibility == GONE) {
                                        Log.i("SEV", "GONE")
                                    }
                                 }
                            }
                        }).start()
                }
            }
        })

打印最后的日志语句 GONE。但视图仍然在屏幕上可见。如何改变其可见性?

标签: androidkotlinandroid-animationshared-element-transitionsharedelementcallback

解决方案


您的代码看起来不错,只是您还没有开始动画,因此没有 onAnimationEnd() 回调。

修改您的代码如下:

ViewCompat.animate(keySharedElementView)
                        .setListener(object : ViewPropertyAnimatorListenerAdapter() {
                            override fun onAnimationEnd(view: View?) {
                                super.onAnimationEnd(view)
                                Log.i("KSEV","Ended")
                            }
                        }).setDuration(250).start()

推荐阅读