Анимация Android: как увеличить высоту просмотра?
Как увеличить высоту представления с помощью свойств анимации в Android?
ObjectAnimator a = ObjectAnimator.ofFloat(viewToIncreaseHeight, "translationY", -100);
a.setInterpolator(new AccelerateDecelerateInterpolator());
a.setDuration(1000);
a.start();
Перемещение Y фактически перемещает представление, не увеличивая высоту. Как увеличить высоту представления?
Ответы
Ответ 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. Это автоматически добавит/исчезнет, когда ваш вид станет видимым. Он также будет анимировать высоту/ширину вашего вида при одинаковых изменениях (например, когда вы меняете видимость одного из дочерних видов и т.д.).
Итак, я рекомендую хотя бы попробовать.