В настоящее время я пытаюсь сделать анимацию вращающейся вокруг оси 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);
}