getSupportFragmentManager()->能支持早期的设备, 所使用的是视图动画,不支持属性动画
getFragmentManager()->只能新的设备,只能支持属性动画,不支持视图动画
模拟3D切换效果例子:
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
//添加MainFragment
getFragmentManager().beginTransaction().addToBackStack(null).add(R.id.fragment_container, new MainFragment()).commit();
}
}
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
MainFragment
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_main, null);
root.findViewById(R.id.btnGoNextPage).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().beginTransaction()
.addToBackStack(null)
.setCustomAnimations(R.animator.enter, R.animator.exit, R.animator.pop_enter, R.animator.pop_exit)
.replace(R.id.fragment_container, new AnotherFragment())
.commit();
}
});
return root;
}
AnotherFragment
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_another, null);
root.findViewById(R.id.btnGoBack).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().popBackStack();
}
});
return root;
}
enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="1000"
android:propertyName="rotationY"
android:valueFrom="-180"
android:valueTo="0" />
<objectAnimator
android:propertyName="alpha"
android:startOffset="500"
android:valueFrom="0"
android:valueTo="1" />
</set>
exit.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="1000"
android:propertyName="rotationY"
android:valueFrom="0"
android:valueTo="180" />
<objectAnimator
android:propertyName="alpha"
android:startOffset="500"
android:valueFrom="1"
android:valueTo="0" />
</set>
pop_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="1000"
android:propertyName="rotationY"
android:valueFrom="-180"
android:valueTo="-360" />
<objectAnimator
android:propertyName="alpha"
android:startOffset="500"
android:valueFrom="0"
android:valueTo="1" />
</set>
pop_exit.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="1000"
android:propertyName="rotationY"
android:valueFrom="0"
android:valueTo="-180" />
<objectAnimator
android:propertyName="alpha"
android:startOffset="500"
android:valueFrom="1"
android:valueTo="0" />
</set>