1.首先在res目录下 新建anim文件夹
2.在anim 文件夹中添加.xml文件 (比如:enter_from_left)
里面内容:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="200" android:fromXDelta="-100%" android:fromYDelta="0%" android:toXDelta="0%" android:toYDelta="0%"/> </set>
enter_from_right.xml:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="250" android:fillAfter="true" android:fromXDelta="100%p" android:fromYDelta="0%p" android:toXDelta="0%p" android:toYDelta="0%p"/> </set>
slide_in_from_bottom.xml:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> <translate android:duration="1000" android:fromXDelta="0%p" android:fromYDelta="100%p" android:toXDelta="0%p" android:toYDelta="0%p"/> </set>
slide_in_from_top.xml:
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_mediumAnimTime" android:fromYDelta="-100%" android:toYDelta="0" />
1.Activity转场动画
入场动画在startActivity()之后加一行代码即可:
overridePendingTransition(R.anim.enter_from_right, R.anim.exit_stop_original_place);
出场动画:
当Activity finish()后面加一行代码:
finish(); overridePendingTransition(R.anim.exit_stop_original_place, R.anim.exit_from_middle_to_bottom);
2.Fragment 转场:
入场动画:
FragmentTransaction mFragmentTransaction = fragmentManager.beginTransaction(); mFragmentTransaction.setCustomAnimations(R.anim.enter_from_bottom, 0, R.anim.enter_from_bottom, 0); mFragmentTransaction.replace(R.id.fl_dashboard_fragment_layout, dashboardFragment).commitAllowingStateLoss();
出场动画:
public void tryHide() { if (!mMainView.hasSavedInstanceState() && mIsAdded) { FragmentManager fm = mMainView.getChildFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_from_middle_to_right, R.anim.enter_from_right, R.anim.exit_from_middle_to_right); ft.remove(this); ft.commit(); mIsAdded = false; } mIsShowing = false; }
3.Dialog 转场动画:
首先在Style中创建一个Style
<style name="DialogSlideFromTopToMiddleAnimation"> <item name="android:windowEnterAnimation">@anim/dialog_slide_in_from_bottom_to_middle</item> <item name="android:windowExitAnimation">@anim/dialog_slide_out_from_middle_to_bottom</item> </style>在创建Dialog时使用:
public class AppNotificationDialog extends BaseDialog { private Listener mListener; private AppNoticeInformation mAppNoticeInformation; private File mFile; private DiscoverContract.MainView mMainView; @BindView(R.id.iv_dialog_app_notification_image) ImageView mNotificationImage; @Override protected int getLayoutResId() { return R.layout.dialog_app_notification; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setEnableTouchCancel(true); if (mFile == null) return; Glide.with(CCApplication.getInstance()).load(mFile).diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true).dontAnimate().centerCrop().into(mNotificationImage); } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // the content final RelativeLayout root = new RelativeLayout(getActivity()); root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); // creating the fullscreen dialog final Dialog dialog = new Dialog(getActivity()); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(root); dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); dialog.getWindow().getAttributes().windowAnimations = R.style.DialogSlideFromTopToMiddleAnimation; return dialog; }