Как создать анимацию перемещения/изменения размера в Android?

Знает ли кто-нибудь об анимации Android? Я хочу создать что-то вроде следующего:

  • У меня большое изображение в центре экрана моего устройства;
  • это изображение становится маленьким (по анимации) и переходит в угол экрана моего устройства;

Что-то вроде этой последовательности:

enter image description here

Любые подсказки будут очень оценены! Спасибо заранее!

Ответ 1

Используйте ViewPropertyAnimator, используя методы типа scaleXBy() и translateYBy(). Вы получаете ViewPropertyAnimator, вызывая animate() на View, на уровне API 11+. Если вы поддерживаете устаревшие устройства, NineOldAndroids предлагает почти работоспособный backport.

Вы также можете прочитать:

Ответ 2

У меня есть класс с одновременным вращением и движением. Это дорого, но оно работает на всех версиях API.

public class ResizeMoveAnimation extends Animation {
    View view; 
    int fromLeft; 
    int fromTop; 
    int fromRight;
    int fromBottom;
    int toLeft; 
    int toTop; 
    int toRight;
    int toBottom;

    public ResizeMoveAnimation(View v, int toLeft, int toTop, int toRight, int toBottom) {
        this.view = v;
        this.toLeft = toLeft;
        this.toTop = toTop;
        this.toRight = toRight;
        this.toBottom = toBottom;

        fromLeft = v.getLeft();
        fromTop = v.getTop();
        fromRight = v.getRight();
        fromBottom = v.getBottom();

        setDuration(500);
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {

        float left = fromLeft + (toLeft - fromLeft) * interpolatedTime;
        float top = fromTop + (toTop - fromTop) * interpolatedTime;
        float right = fromRight + (toRight - fromRight) * interpolatedTime;
        float bottom = fromBottom + (toBottom - fromBottom) * interpolatedTime;

        RelativeLayout.LayoutParams p = (LayoutParams) view.getLayoutParams();
        p.leftMargin = (int) left;
        p.topMargin = (int) top;
        p.width = (int) ((right - left) + 1);
        p.height = (int) ((bottom - top) + 1);

        view.requestLayout();
    }
}