棉花糖应用程序启动动画

时间:2016-06-13 23:15:40

标签: java android animation android-intent android-6.0-marshmallow

如果我拥有View的(x,y),我如何获得marshmallow的默认启动器(或Google Now Launcher / Nova Launcher)应用启动动画。动画从图标开始,并对启动的应用程序进行全屏矩形显示。现在,我使用以下代码启动应用程序:

Intent intent = getActivity().getPackageManager()
                        .getLaunchIntentForPackage("com.android.example");
getActivity().startActivity(intent);

以下是它的样子:

Marshmallow app launch animation

1 个答案:

答案 0 :(得分:0)

FROM:https://stackoverflow.com/a/38422411/1941132

我在启动器源代码here中找到了答案:

 Bundle optsBundle = null;
            ActivityOptions opts = null;
            if (Utilities.ATLEAST_MARSHMALLOW) {
                int left = 0, top = 0;
                int width = v.getMeasuredWidth(), height = v.getMeasuredHeight();
//                    if (v instanceof TextView) {
//                        // Launch from center of icon, not entire view
//                        Drawable icon = Workspace.getTextViewIcon((TextView) v);
//                        if (icon != null) {
//                            Rect bounds = icon.getBounds();
//                            left = (width - bounds.width()) / 2;
//                            top = v.getPaddingTop();
//                            width = bounds.width();
//                            height = bounds.height();
//                        }
//                    }
                opts = ActivityOptions.makeClipRevealAnimation(v, left, top, width, height);
            } else if (!Utilities.ATLEAST_LOLLIPOP) {
                // Below L, we use a scale up animation
                opts = ActivityOptions.makeScaleUpAnimation(v, 0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
            } else if (Utilities.ATLEAST_LOLLIPOP_MR1) {
                // On L devices, we use the device default slide-up transition.
                // On L MR1 devices, we use a custom version of the slide-up transition which
                // doesn't have the delay present in the device default.
                opts = ActivityOptions.makeCustomAnimation(context, R.anim.task_open_enter, R.anim.no_anim);
            }
            optsBundle = opts != null ? opts.toBundle() : null;

            context.startActivity(intent, optsBundle);