private fun showOrhide(
//收缩部分
linearLayout: LinearLayout,
//旋转箭头
taskDetailArrow: RelativeLayout
) {
val scrollView = binding.scrollView
val rect = Rect()
linearLayout.getGlobalVisibleRect(rect)
val arrow = taskDetailArrow.getChildAt(1)
if (linearLayout.visibility == View.VISIBLE) {
arrow.rotation = 180f
ObjectAnimator.ofFloat(
linearLayout,
"translationY",
0.0f, -linearLayout.measuredHeight.toFloat()
).apply {
duration = 500
interpolator = AccelerateInterpolator()
start()
}.addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {
}
override fun onAnimationEnd(animation: Animator?) {
linearLayout.visibility = View.GONE
scrollView.post {
scrollView.smoothScrollTo(0, rect.bottom);
}
}
override fun onAnimationCancel(animation: Animator?) {
}
override fun onAnimationStart(animation: Animator?) {
}
})
} else {
arrow.rotation = 0f
ObjectAnimator.ofFloat(
linearLayout,
"translationY",
-linearLayout.measuredHeight.toFloat(), 0.0f
).apply {
duration = 500
interpolator = AccelerateInterpolator()
start()
}.addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {
}
override fun onAnimationEnd(animation: Animator?) {
linearLayout.visibility = View.VISIBLE
scrollView.post {
scrollView.smoothScrollTo(0, rect.bottom);
}
}
override fun onAnimationCancel(animation: Animator?) {
}
override fun onAnimationStart(animation: Animator?) {
}
})
}
根据传入的View的visibility来执行收缩或者展开,scrollView不是找不到而是最外层布局哦。