2017-02-08 6 views
1

В настоящее время я работаю над анимацией, которая вырастет, если пользователь нажмет на нее. В принципе, это карта, которая, щелкнув, покажет нижнее содержимое. Для этого, я простирающийся анимации, как это:Android получить высоту содержимого содержимого упаковки, накаченного как 0dp

Val collapseAnimation = object : Animation() { 
      override fun applyTransformation(interpolatedTime: Float, t: Transformation?) { 
       val interpolatedInverted = 1 - interpolatedTime 

       val headerLp = headerImage.layoutParams 
       headerLp.width = ... 
       headerImage.layoutParams = headerLp 
      } 
     } 

Проблема заключается в том, что мне нужно, чтобы получить высоту обзора (wrap_content), который определен в XML как 0dp. В принципе, я хочу вырастить представление от 0dp до wrap_content, и для этого мне нужно знать, что такое размер wrap_content.

Как я могу это сделать наиболее эффективным способом, без жесткого кодирования размера представления?

+0

попробуй использовать ViewTreeObserver, чтобы получить размер во время выполнения. https://developer.android.com/reference/android/view/ViewTreeObserver.html –

+0

вид изначально завышен как 0dp, поэтому он не будет работать только с этим решением. Думаю –

+0

После того, как представление выложено, getWidth' в представлении вернет фактическую ширину. Поэтому просто не называйте это в 'onCreateView'. Вы можете использовать 'ViewTreeObserver', как было предложено, чтобы убедиться, что представление было выложено. –

ответ

2

Для того чтобы измерить представление с различным Params макета и получить его высоту, мы можем сделать следующее:

contentContainer.measure(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) 
val contentContainerFinalHeight = contentContainer.measuredHeight 
Смежные вопросы