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不是找不到而是最外層佈局哦。