在我的代码中,我试图弄清楚如何绘制我的视图。我必须等到它将具有适当的绘制高度,这就是为什么我要使用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,也会发生此解决方案。 我不知道为什么。
有什么想法/提示吗?