在我的应用程序中,我正在执行以下操作(使用支持库):
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动画?
答案 0 :(得分:0)
您可以查看AnimationUtils,更准确地说是
loadAnimation(Context context, int id)
它应该是你需要的。 Android也已经有了淡入淡出和淡出android.R.anim.fade_in和android.R.anim.fade_out的动画,你应该尝试使用它们,也许它们被证明更有效率。
答案 1 :(得分: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);
请注意,mEnterAnimation
和mExitAnimation
字段被声明为静态。要通过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;
}