Масштабирование анимации не меняет размер ImageView - PullRequest
0 голосов
/ 08 июля 2019

Я создаю приложение, которое загружает Drawables из ресурса и отображает его в заполнителе ImageView.Когда пользователь нажимает кнопку, чтобы загрузить следующее изображение, я создал анимацию, которая перемещает и масштабирует старое изображение в новом месте и загружает новый объект рисования для заполнителя.

После 30images Я использую OOM, что имеет смысл.

Я пытаюсь сделать повторную выборку каждого изображения после завершения анимации, поскольку я начинаю с заполнителя 500X500 и заканчиваю 1/3 его.

Проблема в том, что после завершения анимации ширина и высота ImageView остаются неизменными.Разве масштабирующая анимация не должна изменять ширину и высоту ImageView?

Вот код для анимации:

    //create the animation
    imageView.setPivotX(0);
    imageView.setPivotY(0);
    imageView.animate()
             .scaleX(scaleX) //about 0.3
             .scaleY(scaleY) //about 0.3
             .x(finalX) //location x of the image
             .y(finalY) //location y of the image
             .setListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animation) {
                            int reqWidth = imageView.getWidth(); //result 500 as expected
                            int reqHeight = imageView.getHeight();//result 500 as expected
                            Drawable image = imageView.getDrawable();
                        }

                        @Override
                        public void onAnimationEnd(Animator animation) {
                            int reqWidth = imageView.getWidth();//result 500 - why?
                            int reqHeight = imageView.getHeight();//result 500 - why?
                            Drawable image = imageView.getDrawable();
                        }

                        @Override
                        public void onAnimationCancel(Animator animation) {}

                        @Override
                        public void onAnimationRepeat(Animator animation) {}
                    });

1 Ответ

1 голос
/ 08 июля 2019

scaleX() вызывает анимирование свойства scaleX для указанного значения ( ссылка ). Он не изменяет напрямую значения ширины / высоты макета. ( ссылка )

Вы можете получить ожидаемые значения ширины / высоты, умножив их на значения scaleX / Y.

//create the animation
    imageView.setPivotX(0);
    imageView.setPivotY(0);
    imageView.animate()
             .scaleX(scaleX) //about 0.3
             .scaleY(scaleY) //about 0.3
             .x(finalX) //location x of the image
             .y(finalY) //location y of the image
             .setListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animation) {
                            int reqWidth = imageView.getWidth(); //result 500 as expected
                            int reqHeight = imageView.getHeight();//result 500 as expected
                            Drawable image = imageView.getDrawable();
                        }

                        @Override
                        public void onAnimationEnd(Animator animation) {
                            int reqWidth = imageView.getWidth() * imageView.getScaleX;
                            int reqHeight = imageView.getHeight() * imageView.getScaleY;
                            Drawable image = imageView.getDrawable();
                        }

                        @Override
                        public void onAnimationCancel(Animator animation) {}

                        @Override
                        public void onAnimationRepeat(Animator animation) {}
                    });
...