Я добавил анимацию в свою деятельность, используя ValueAnimator
.
LinearLayout linearLayout = (LinearLayout) allCards.get(i).getChildAt(0);
final ImageView arrowImage = (ImageView) linearLayout.getChildAt(2);
int parentWidth = ((View)view.getParent()).getMeasuredWidth();
ValueAnimator widthAnimator = ValueAnimator.ofInt(parentWidth);
widthAnimator.setDuration(4000);
widthAnimator.setStartDelay(delay);
widthAnimator.setInterpolator(new DecelerateInterpolator());
final int finalI = i;
widthAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
allButton.get(finalI).getLayoutParams().width = (int) animation.getAnimatedValue();
allButton.get(finalI).requestLayout();
}
});
widthAnimator.start();
arrowImage.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
final int parentHeight = arrowImage.getMeasuredHeight();
ValueAnimator heightAnimator = ValueAnimator.ofInt(parentHeight);
heightAnimator.setDuration(40);
heightAnimator.setStartDelay(delay);
heightAnimator.setInterpolator(new DecelerateInterpolator());
heightAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
arrowImage.getLayoutParams().height = (int) animation.getAnimatedValue();
arrowImage.requestLayout();
rootLayout.requestLayout();
}
});
heightAnimator.start();
. Существуют два ValueAnimator. Один, который увеличивает ширину кнопки с 0 до MATCH_PARENT
, другой - с высоты изображения с 0 до WRAP_CONTENT
. Оба аниматора делают свою работу. Но проблема в том, что при увеличении высоты изображения компоненты ниже не сдвигаются. Они опускаются только тогда, когда начинается их анимация.
См. Следующий GIF
Здесь высота изображения увеличивается, но карта под ним не перемещается вниз и уменьшается только при запуске собственной анимации. Можно ли заставить все компоненты двигаться вниз по мере увеличения высоты изображения?