Android анимация не обновляет интерфейс - PullRequest
0 голосов
/ 16 апреля 2020

Я добавил анимацию в свою деятельность, используя 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

Здесь высота изображения увеличивается, но карта под ним не перемещается вниз и уменьшается только при запуске собственной анимации. Можно ли заставить все компоненты двигаться вниз по мере увеличения высоты изображения?

...