【问题标题】:Adding listener for shared element callback not changing view visibility为共享元素回调添加侦听器而不更改视图可见性
【发布时间】:2021-01-16 18:12:19
【问题描述】:

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

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。但是视图仍然在屏幕上可见。如何更改其可见性?

【问题讨论】:

  • 你忘记启动动画了,ViewCompat.animate().setDuration(200).start()

标签: android kotlin android-animation shared-element-transition sharedelementcallback


【解决方案1】:

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

修改你的代码如下:

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

【讨论】:

  • onAnimationEnd 被调用,但视图可见性没有变化。 runOnUiThread { keySharedElementView.visibility = GONE } 这是在 onAnimationEnd 里面。
  • 检查您是否没有在其他地方管理可见性...
猜你喜欢
  • 2020-06-18
  • 2011-12-23
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多