这是可行的解决方案:
@jskierbi答案的修改版本。
import android.support.v4.app.Fragment;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
public class SupportBaseFragment extends Fragment {
private boolean mIsChangingConfigurations = false;
private static final String STATE_CHANGING_CONFIGURATIONS = "STATE_CHANGING_CONFIGURATIONS";
@Override
public void onResume() {
super.onResume();
mIsChangingConfigurations = false;
}
@Override
public void onPause() {
super.onPause();
mIsChangingConfigurations = getActivity().isChangingConfigurations();
}
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
if (mIsChangingConfigurations)
return null;
if (enter)
return AnimationUtils.loadAnimation(getContext(), nextAnim == 0 ? R.anim.enter_pop : nextAnim);
else
return AnimationUtils.loadAnimation(getContext(), nextAnim == 0 ? R.anim.exit_pop : nextAnim);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mIsChangingConfigurations = savedInstanceState.getBoolean(STATE_CHANGING_CONFIGURATIONS);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(STATE_CHANGING_CONFIGURATIONS, mIsChangingConfigurations);
}
enter.xml
<?xml version="1.0" encoding="utf-8"?>
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%"
android:interpolator="@android:anim/decelerate_interpolator"
android:toXDelta="0"/>
</set>
enter_pop.xml
<?xml version="1.0" encoding="utf-8"?>
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="-100%"
android:interpolator="@android:anim/decelerate_interpolator"
android:toXDelta="0"/>
</set>
exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="-100%"/>
</set>
exit_pop.xml
<?xml version="1.0" encoding="utf-8"?>
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="100%"/>
</set>
使用方法:
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.enter, R.anim.exit,
R.anim.enter_pop, R.anim.exit_pop)
.replace(R.id.fragment_container, myFancyFragment)
.addToBackStack(null)
.commit();
slide_in_left.xml
文件中吗? - RicardopopEnter
和popExit
之外,所有都正常工作。问题出现在Lollipop设备上。没有尝试模拟器。 - Nizam