Android объединяет анимацию в одном преобразовании - PullRequest
2 голосов
/ 27 марта 2012

В настоящее время я пытаюсь сделать анимацию вращающейся вокруг оси y + масштабирование + вращение одновременно.

Анимация вращения основана на этом . В настоящее время у меня есть все анимации в AnimationSet, который работает, но довольно медленно. Поэтому я подумал, что смогу объединить все три анимации в анимации поворота, так как там у меня уже есть applyTransformation. Поэтому я проверил источник Android для ScaleAnimation и TranslateAnimation, и все это казалось очень простым. Но это не работает.

Итак, теперь вопрос: это вообще возможно? И если да: что я делаю не так?

РЕДАКТИРОВАТЬ: Я все ближе! Перевод и ротация работают сейчас. Отсутствует только масштабирование. Вот мой код:

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    float degrees = fromDegrees + ((toDegrees - fromDegrees) * interpolatedTime);

    float sx = 1.0f;
    float sy = 1.0f;

    if (scaleFromX != 1.0f || scaleToX != 1.0f) {
        sx = scaleFromX + ((scaleToX - scaleFromX) * interpolatedTime);
    }
    if (scaleFromY != 1.0f || scaleToY != 1.0f) {
        sy = scaleFromY + ((scaleToY - scaleFromY) * interpolatedTime);
    }

    float dx = fromDeltaX;
    float dy = fromDeltaY;
    if (fromDeltaX != toDeltaX) {
        dx = fromDeltaX + ((toDeltaX - fromDeltaX) * interpolatedTime);
    }
    if (fromDeltaY != toDeltaY) {
        dy = fromDeltaY + ((toDeltaY - fromDeltaY) * interpolatedTime);
    }

    final Matrix matrix = t.getMatrix();
    matrix.setTranslate(dx, dy);
    matrix.setScale(sx, sy, pivotX, pivotY);

    camera.save();
    if (reverse) {
        camera.translate(0.0f, 0.0f, interpolatedTime);
    } else {
        camera.translate(0.0f, 0.0f, 1.0f - interpolatedTime);
    }
    camera.rotateY(degrees);
    camera.getMatrix(matrix);
    camera.restore();

    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX + dx, centerY + dy);

}
...