我正在尝试使用片段的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();
提示?谢谢! :)
答案 0 :(得分:8)
如今,Android文档明确建议不要直接使用android.R.*
中的资源,因为平台的每个版本都会对其进行更改。甚至一些资源从一个版本消失到另一个版本,所以你不应该依赖它们。另一方面,许多资源是私有的,并且不能从开发人员的代码中获得。
最安全(和推荐)的方法是简单地复制&将所需的资源(在本例中为动画)从您想要的Android版本的源代码粘贴到您自己的代码中,并通过常规R.*
使用它们。
您可以通过多种方式浏览Android源代码,如[1]中所述。
答案 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();
}
此解决方案比直接引用资源更安全,因为它引用的属性在没有首先弃用警告的情况下不会发生变化。