Страницы

Поиск по вопросам

четверг, 14 февраля 2019 г.

Как изменить размер CardView с анимацией?

У меня есть layout в котором есть CardView внутри которого лежит, скажем, картинка.
Я хочу увеличить высоту и ширину этой CardView вместе с анимацией так как это делают в Material Design Guidelines
Я пробовал 2 способа:
cardView.animate().scaleX().scaleY() - этот способ изменяет размер CardView но вместе с ним и изменяется размер всего, что внутри его даже если у содержимого выставлена специфичная ширина и высота; можно сделать cardView.getLayoutParams() и потом изменить height и width или можно добавить margin - это действительно меняет размер, но непонятно как это анимировать.
Весьма странно, но я не нашел никаких стоящих рецептов в гугле.


Ответ

Можно воспользоваться вот этим способом с gitHub-а:
Создаём анимацию изменения параметров View:
public class ResizeAnimation extends Animation { final int startWidth; final int targetWidth; View view;
public ResizeAnimation(View view, int targetWidth) { this.view = view; this.targetWidth = targetWidth; startWidth = view.getWidth(); }
@Override protected void applyTransformation(float interpolatedTime, Transformation t) { int newWidth = (int) (startWidth + (targetWidth - startWidth) * interpolatedTime); view.getLayoutParams().width = newWidth; view.requestLayout(); }
@Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); }
@Override public boolean willChangeBounds() { return true; } }
Применяем её:
ResizeAnimation resizeAnimation = new ResizeAnimation(view, targetSize); resizeAnimation.setDuration(600); view.startAnimation(resizeAnimation);

Комментариев нет:

Отправить комментарий