Как масштабировать View / ViewGroup - правильно анимировать макет?
В нескольких словах, я хочу масштабировать представление - так же, как это делает Android Market, когда вы нажимаете кнопку "Еще" на примере "Описание".
Я понял, что Android Market имеет макет следующей структуры:
<FrameLayout
android:id="@+id/artists_frame"
android:layout_width="fill_parent"
android:layout_height="64dip"
android:layout_below="@id/something1"
android:layout_above="@id/something2"
>
<!-- Some view there, which height >> 64dip -->
</FrameLayout>
Итак, я попробовал различные анимации / LayoutAnimations на FrameLayout (через view.setAnimation(), view.setLayoutAnimation()
а также ScaleAnimation
), но эффект всегда один и тот же: представление анимируется, но его реальное layout_height после масштабирования остается прежним (поэтому положение других представлений, зависящих от данного FrameLayout, остается неизменным).
После этого я подумал - я изменяю в цикле layout_height данного FrameLayout:
layoutParams = view.getLayoutParams()
layoutParams.height = scaleTo;
layout.setLayoutParams(layoutParams);
У меня это выглядит как рынок, но стоимость (производительность!!!) очень высока...
Таким образом, вопрос заключается в следующем: существует ли какой-либо другой, правильный способ масштабирования (например, изменения высоты с 50 на 200dip) данного View / ViewGroup, чтобы положение представлений под анимационным видом также изменялось?
1 ответ
Как говорит Чет Хаазе в этом блоге: http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html
"... Наконец, предыдущие анимации изменили внешний вид целевых объектов... но на самом деле они не изменили сами объекты..."
Так как то, что вам нужно, это только визуально, а не менять вид LayoutParameters
Я бы оживил вид снизу, используя перевод android:fillAfter
для обоих.