Развернуть / свернуть вопросы высоты карты - PullRequest
0 голосов
/ 23 мая 2019

У меня много карт в 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()
        }
...