安卓传统转场动画

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;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张海龙_China

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值