Что должна делать анимация ниже?
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/linear_interpolator"
android:duration="1000" />
Достаточно просто.Он должен представлять вращение по часовой стрелке вокруг центра.Просто крутись один раз, затем остановись.Правильно?
И так оно и есть ... когда я применяю его к представлению.
Но когда я вместо этого анимирую переход активности, происходит нечто совершенно иное.Действие начинает вращаться против часовой стрелки , но в то же время оно вылетает из верхней правой части экрана.Затем он возвращается, все еще вращаясь против часовой стрелки и теперь перевернутым, и вылетает из нижнего левого угла экрана.Наконец, он возвращается и заканчивает свое вращение в вертикальном положении.
Независимо от того, что я указываю для pivotX
и pivotY
, поведение всегда одинаково.Кажется, они полностью игнорируются.И в любом случае, вещь, конечно, вообще не вращается вокруг какого-либо фиксированного центра!
Что это за чепуха?Это ошибка?
Для полноты я сохранил эту анимацию как res/anim/spin.xml
и вызвал ее следующим образом:
startActivity(intent);
overridePendingTransition(R.anim.spin, R.anim.spin);
(Использование одной и той же анимации дляout не имеет смысла, но это минимальный пример.)
Обновление: демонстрационное приложение для воспроизведения этой проблемы
Я собрал минимальный проект Android, который демонстрирует проблему.Основное действие выглядит следующим образом:
package com.example.animtest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
public class MainActivity extends Activity {
private View rootView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
rootView = getLayoutInflater().inflate(R.layout.main, null);
setContentView(rootView);
}
public void animateRootView(View view) {
Animation spin = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.spin);
rootView.setAnimation(spin);
spin.start();
}
public void animateActivity(View view) {
Intent intent = new Intent();
intent.setClassName("com.example.animtest", "com.example.animtest.MainActivity");
startActivity(intent);
overridePendingTransition(R.anim.spin, R.anim.spin);
}
}
Вот ZIP-файл с исходным кодом проекта и исполняемым файлом APK .Протестировано на Nexus One, Android 2.2.2.