如何在Android中使用默认动画?

时间:2014-03-27 15:54:49

标签: android android-fragments android-animation

我正在尝试使用片段的Activity的默认动画..在这里我找到了一些关于它的东西:

Android: using Activity's default animation for Fragments

问题是:好的,我需要(例如)“activityOpenEnterAnimation”..我该如何使用它?

使用以下代码无效:

        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.setCustomAnimations(android.R.anim.activityOpenEnterAnimation, android.R.anim.activityOpenExitAnimation);

        transaction.replace(R.id.container, fragment)
                .addToBackStack(((Object) fragment).getClass().getName())
                .commit();

提示?谢谢! :)

3 个答案:

答案 0 :(得分:8)

如今,Android文档明确建议不要直接使用android.R.*中的资源,因为平台的每个版本都会对其进行更改。甚至一些资源从一个版本消失到另一个版本,所以你不应该依赖它们。另一方面,许多资源是私有的,并且不能从开发人员的代码中获得。

最安全(和推荐)的方法是简单地复制&将所需的资源(在本例中为动画)从您想要的Android版本的源代码粘贴到您自己的代码中,并通过常规R.*使用它们。

您可以通过多种方式浏览Android源代码,如[1]中所述。

[1] Where can I find Android source code online?

答案 1 :(得分:2)

后退发生时使用默认Android动画的示例

 @Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}

要使用默认动画,您应该使用 android.R.anim.ANIMATIONNAME

答案 2 :(得分:0)

我设法让它以这种方式工作:

static public int getResourceIdFromCurrentThemeAttribute(FragmentActivity activity, int attribute){
    TypedValue a = new TypedValue();
    activity.getTheme().resolveAttribute(attribute, a, false);
    return a.resourceId;
}

//This type of fragment will be opened like an activity
static public void openActivityLikeFragment(FragmentActivity activity, BaseFragment fragment, int containerId, String stackRef) {
    FragmentManager fm = activity.getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    //The fragment open/close transition should have the same animations as its activity
    ft.setCustomAnimations(
            getResourceIdFromCurrentThemeAttribute(activity, android.R.attr.activityOpenEnterAnimation),
            getResourceIdFromCurrentThemeAttribute(activity, android.R.attr.activityOpenExitAnimation),
            getResourceIdFromCurrentThemeAttribute(activity, android.R.attr.activityCloseEnterAnimation),
            getResourceIdFromCurrentThemeAttribute(activity, android.R.attr.activityCloseExitAnimation)
    );
    ft.replace(containerId, fragment);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(stackRef);
    ft.commit();
}

此解决方案比直接引用资源更安全,因为它引用的属性在没有首先弃用警告的情况下不会发生变化。