使用Android AnimationEnd,view.post和Kotlin lambda

时间:2018-07-18 07:53:33

标签: android android-layout kotlin

在我的代码中,我试图弄清楚如何绘制我的视图。我必须等到它将具有适当的绘制高度,这就是为什么我要使用post方法。 在这个片段上,我还必须隐藏我的底部导航菜单,以免改变视图高度。

我的动画淡出底部菜单(这只是一个视图/视图组,没有任何库):

fun fadeOutWithVisibility(duration: Int, visibility: Int, onHideCompleted: () -> Unit = {}, vararg views: View) {
    for (view in views) {
        view.animate()
            .alpha(0f)
            .setDuration(duration.toLong())
            .setListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator) {
                    view.visibility = visibility
                    onHideCompleted()
                }
            })
    }
}

使用此方法隐藏底部菜单的方法:

changeNavigationMenuVisibility(View.GONE)

所以我有两个解决方案。第一个:

    Handler().postDelayed({
        skeletonImageView.post {
            setSkeletonClickableParams()
        }
    }, 150)

此解决方案运行良好,并且setSkeletonClickableParams()方法仅运行一次。但是由于硬编码的延迟和Handler的使用,我认为这种解决方案不是最漂亮的解决方案。这就是为什么我要寻找另一个并使用onAnimationEnd(上面已提到)的原因。

第二个:

    changeNavigationMenuVisibility(View.GONE, {
        skeletonImageView.post {
            setSkeletonClickableParams()
        }
    })

当我可以获取正确的高度时(在隐藏底部菜单后以及绘制skeletonImageView时),但setSkeletonClickableParams()方法称为TWICE,也会发生此解决方案。 我不知道为什么。

有什么想法/提示吗?

0 个答案:

没有答案