安卓传统转场动画

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转场动画

扫描二维码关注公众号,回复: 2194506 查看本文章

入场动画在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;
    }


猜你喜欢

转载自blog.csdn.net/jason_hd/article/details/80903741