Почему моя анимация поворота становится все шаткой при применении к переходу «Активность»? - PullRequest
5 голосов
/ 25 января 2011

Что должна делать анимация ниже?

<?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.

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

известная проблема .. до 2.3.4 ничего не было сделано :( http://code.google.com/p/android/issues/detail?id=10402

0 голосов
/ 15 февраля 2011

Звучит так, как будто мы не совсем поддерживаем вращательную анимацию в Activity:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...