0

在我的应用程序中,我正在执行以下操作(使用支持库):

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
transaction.replace(R.id.fragment_container, fragment);
transaction.commit();

动画的R.anim.fade_in持续R.anim.fade_out时间少于 200 毫秒。

我第一次更改片段时,动画根本不显示。我认为这是由于 XML 膨胀:膨胀 XML 所需的时间大于动画的持续时间。从第二次开始,动画正确显示。

有没有办法预加载 XML 动画?

4

2 回答 2

0

你可以看看AnimationUtils更准确地说

loadAnimation(Context context, int id)

它应该是你需要的。此外,android 已经有用于淡入淡出的动画 android.R.anim.fade_in 和 android.R.anim.fade_out,你应该尝试使用它们,也许它们被证明更有效。

于 2012-10-10T12:47:42.780 回答
0

我自己找到了。onCreateAnimation()您必须覆盖Fragment. 我是这样做的:

@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
    if (enter)
        return mEnterAnimation;
    else
        return mExitAnimation;
}

private static final Animation mEnterAnimation = AnimationUtils
    .loadAnimation(MyApplication.getInstance().getBaseContext(),
    R.anim.frag_fade_in);

private static final Animation mExitAnimation = AnimationUtils
    .loadAnimation(MyApplication.getInstance().getBaseContext(),
    R.anim.frag_fade_out);

请注意,mEnterAnimationandmExitAnimation字段被声明为静态的。要通过加载动画,AnimationUtils.loadAnimation()您需要一个Context. Context是通过单例获得的MyApplication。要创建这样一个单例,只需写入您的AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:name=".MyApplication"
        android:label="@string/app_name" >

        <!-- Insert your activities here -->

    </application>

</manifest>

然后将类创建com.example.app.MyApplication为单例:

public class MyApplication extends Application {
    public static MyApplication getInstance() {
        return mInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

    private static MyApplication mInstance;
}
于 2012-10-12T12:43:54.510 回答