У меня много карт в RecyclerView, и я делаю анимацию развертывания / свертывания для каждого CardView. Мой метод расширения не раскрывается правильно.
Для измерения моей карты я использую:
view.measure(View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.AT_MOST),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED))
Расширяя карту в первый раз, высота карты невероятно велика (около 9700), потому что я использую View.MeasureSpec.UNSPECIFIED
.
Впервые происходит такое странное поведение. Когда я снова расширяю карту, мой рост известен теперь из-за первого расширения, и карта имеет правильную высоту.
Мне нужно получить правильную высоту карты перед первым расширением
Я видел несколько постов на ТАК, как:
Android: получить высоту вида до его отрисовки
Как автоматически настроить высоту TextView в соответствии с размером строки?
Как измерить высоту TextView на основе ширины устройства и размера шрифта?
Нет успеха. Как я могу получить рост?
Ниже моего кода:
fun expand(view: View, duration: Long) {
view.visibility = View.VISIBLE
view.measure(View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.AT_MOST),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED))
val targetHeight: Int = view.measuredHeight
view.layoutParams.height = 0
val valueAnimator: ValueAnimator = ValueAnimator.ofInt(targetHeight)
valueAnimator.addUpdateListener { animation ->
view.layoutParams.height = animation.animatedValue as Int
view.requestLayout()
}
valueAnimator.interpolator = LinearInterpolator()
valueAnimator.duration = duration
valueAnimator.start()
}