下面的动画应该做什么?
<?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" />
很简单。它应该表示围绕中心的顺时针 旋转。只需旋转一次,然后停止。对吧?
当我将它应用于 View 时,它确实如此。
但是,当我为 Activity 过渡制作动画时,会发生一些完全不同的事情。 Activity 开始逆时针旋转,但同时它飞离了屏幕的右上角。然后它又回来了,仍然逆时针旋转,现在是颠倒的,飞离了屏幕的左下角。最后,它返回并结束直立旋转。
无论我为 pivotX
和 pivotY
指定什么,行为始终相同。他们似乎完全被忽略了。不管怎样,这个东西肯定根本没有绕着任何固定的枢轴旋转!
这是什么鬼话?是错误吗?
为了完整起见,我将这个动画保存为res/anim/spin.xml
,并按如下方式调用它:
startActivity(intent);
overridePendingTransition(R.anim.spin, R.anim.spin);
(对进出都使用相同的动画是没有意义的,但这是最小的示例。)
更新:重现此问题的演示应用
我整理了一个最小的 Android 项目来演示该问题。主要 Activity 如下所示:
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 file with the project source和 runnable APK file .在 Nexus One、Android 2.2.2 上测试。
最佳答案
已知问题 .. 直到 2.3.4 什么都没做 :( http://code.google.com/p/android/issues/detail?id=10402
关于android - 为什么我的旋转动画在应用到 Activity 过渡时都不稳定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798380/