Подтвердить что ты не робот

Анимация Android: как увеличить высоту просмотра?

Как увеличить высоту представления с помощью свойств анимации в Android?

ObjectAnimator a = ObjectAnimator.ofFloat(viewToIncreaseHeight, "translationY", -100);
a.setInterpolator(new AccelerateDecelerateInterpolator());
a.setDuration(1000);
a.start();

Перемещение Y фактически перемещает представление, не увеличивая высоту. Как увеличить высоту представления?

4b9b3361

Ответ 1

ValueAnimator anim = ValueAnimator.ofInt(viewToIncreaseHeight.getMeasuredHeight(), -100);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        int val = (Integer) valueAnimator.getAnimatedValue();
        ViewGroup.LayoutParams layoutParams = viewToIncreaseHeight.getLayoutParams();
        layoutParams.height = val;
        viewToIncreaseHeight.setLayoutParams(layoutParams);
    }
});
anim.setDuration(DURATION);
anim.start(); 

Ответ 2

Вы можете использовать ViewPropertyAnimator, который может сэкономить вам несколько строк кода:

yourView.animate().scaleY(-100f).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(1000);

это должно быть все, что вам нужно, обязательно проверьте документацию и все доступные методы для ViewPropertyAnimator.

Ответ 3

Это довольно просто, как вы можете видеть ниже.

<LinearLayout android:id="@+id/container"
android:animateLayoutChanges="true"
.../>

Более подробная информация ниже:

https://developer.android.com/training/animation/layout

Ответ 4

Это не прямой ответ на этот вопрос. Однако это может кому-то помочь.

Иногда мы хотим увеличить/уменьшить высоту просмотра, потому что часть его потомка добавляется/удаляется (или просто становится видимой/пропавшей).

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

<LinearLayout
    ...
    android:animateLayoutChanges="true"
.../>

Или на Java:

linearLayout.setLayoutTransition(new LayoutTransition());

Если вы создали пользовательский вид:

public StickerPickerView(final Context context, final AttributeSet attrs,
        final int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    setLayoutTransition(new LayoutTransition());
}

Для меня это было довольно удовлетворительно, но я только что протестировал на последних API. Это автоматически добавит/исчезнет, когда ваш вид станет видимым. Он также будет анимировать высоту/ширину вашего вида при одинаковых изменениях (например, когда вы меняете видимость одного из дочерних видов и т.д.).

Итак, я рекомендую хотя бы попробовать.