Как масштабировать 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 для обоих.

Другие вопросы по тегам