launcher滑屏特效集合汇总

来源:互联网 发布:编辑五线谱的软件 编辑:程序博客网 时间:2024/06/06 08:31

下面是本人从CM源码中摘录出来的Android Launcher屏幕滑动特效大集合。做记录用,有兴趣的看看。

protected static abstract class TransitionEffect {//定义各种动画效果        public static final String TRANSITION_EFFECT_NONE = "none";        public static final String TRANSITION_EFFECT_ZOOM_IN = "zoom-in";        public static final String TRANSITION_EFFECT_ZOOM_OUT = "zoom-out";        public static final String TRANSITION_EFFECT_ROTATE_UP = "rotate-up";        public static final String TRANSITION_EFFECT_ROTATE_DOWN = "rotate-down";        public static final String TRANSITION_EFFECT_CUBE_IN = "cube-in";        public static final String TRANSITION_EFFECT_CUBE_OUT = "cube-out";        public static final String TRANSITION_EFFECT_STACK = "stack";        public static final String TRANSITION_EFFECT_ACCORDION = "accordion";        public static final String TRANSITION_EFFECT_FLIP = "flip";        public static final String TRANSITION_EFFECT_CYLINDER_IN = "cylinder-in";        public static final String TRANSITION_EFFECT_CYLINDER_OUT = "cylinder-out";        public static final String TRANSITION_EFFECT_CROSSFADE = "crossfade";        public static final String TRANSITION_EFFECT_OVERVIEW = "overview";        protected final Workspace mWorkspace;        private final String mName;        public TransitionEffect(Workspace workspace, String name) {            mWorkspace = workspace;            mName = name;        }        public abstract void screenScrolled(View v, int i, float scrollProgress);        public final String getName() {            return mName;        }        public static void setFromString(Workspace workspace, String effect) {             if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_NONE)) {                workspace.setTransitionEffect(null);            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_ZOOM_IN)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Zoom(workspace, true));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_ZOOM_OUT)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Zoom(workspace, false));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_CUBE_IN)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Cube(workspace, true));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_CUBE_OUT)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Cube(workspace, false));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_ROTATE_UP)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Rotate(workspace, true));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_ROTATE_DOWN)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Rotate(workspace, false));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_STACK)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Stack(workspace));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_ACCORDION)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Accordion(workspace));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_FLIP)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Flip(workspace));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_CYLINDER_IN)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Cylinder(workspace, true));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_CYLINDER_OUT)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Cylinder(workspace, false));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_CROSSFADE)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Crossfade(workspace));            } else if (effect.equals(Workspace.TransitionEffect.TRANSITION_EFFECT_OVERVIEW)) {                workspace.setTransitionEffect(new Workspace.TransitionEffect.Overview(workspace));            }        }        public static class Zoom extends TransitionEffect {            private boolean mIn;            public Zoom(Workspace workspace, boolean in) {                super(workspace, in ? TRANSITION_EFFECT_ZOOM_IN : TRANSITION_EFFECT_ZOOM_OUT);                mIn = in;            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                float scale = 1.0f + (mIn ? -0.8f : 0.4f) * Math.abs(scrollProgress);                // Extra translation to account for the increase in size                if (!mIn) {                    float translationX = v.getMeasuredWidth() * 0.1f * -scrollProgress;                    v.setTranslationX(translationX);                }                v.setScaleX(scale);                v.setScaleY(scale);            }        }        public static class Rotate extends TransitionEffect {            private boolean mUp;            public Rotate(Workspace pagedView, boolean up) {                super(pagedView, up ? TRANSITION_EFFECT_ROTATE_UP : TRANSITION_EFFECT_ROTATE_DOWN);                mUp = up;            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                float rotation =                        (mUp ? TRANSITION_SCREEN_ROTATION : -TRANSITION_SCREEN_ROTATION) * scrollProgress;                float translationX = v.getMeasuredWidth() * scrollProgress;                float rotatePoint =                        (v.getMeasuredWidth() * 0.5f) /                                (float) Math.tan(Math.toRadians((double) (TRANSITION_SCREEN_ROTATION * 0.5f)));                v.setPivotX(v.getMeasuredWidth() * 0.5f);                if (mUp) {                    v.setPivotY(-rotatePoint);                } else {                    v.setPivotY(v.getMeasuredHeight() + rotatePoint);                }                v.setRotation(rotation);                v.setTranslationX(translationX);            }        }        public static class Cube extends TransitionEffect {            private boolean mIn;            public Cube(Workspace workspace, boolean in) {                super(workspace, in ? TRANSITION_EFFECT_CUBE_IN : TRANSITION_EFFECT_CUBE_OUT);                mIn = in;            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                float rotation = (mIn ? 90.0f : -90.0f) * scrollProgress;                v.setPivotX(scrollProgress < 0 ? 0 : v.getMeasuredWidth());                v.setPivotY(v.getMeasuredHeight() * 0.5f);                v.setRotationY(rotation);            }        }        public static class Stack extends TransitionEffect {            private ZInterpolator mZInterpolator = new ZInterpolator(0.5f);            private DecelerateInterpolator mLeftScreenAlphaInterpolator = new DecelerateInterpolator(4);            protected AccelerateInterpolator mAlphaInterpolator = new AccelerateInterpolator(0.9f);            public Stack(Workspace workspace) {                super(workspace, TRANSITION_EFFECT_STACK);            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                final boolean isRtl = mWorkspace.isLayoutRtl();                float interpolatedProgress;                float translationX;                float maxScrollProgress = Math.max(0, scrollProgress);                float minScrollProgress = Math.min(0, scrollProgress);                if (mWorkspace.isLayoutRtl()) {                    translationX = maxScrollProgress * v.getMeasuredWidth();                    interpolatedProgress = mZInterpolator.getInterpolation(Math.abs(maxScrollProgress));                } else {                    translationX = minScrollProgress * v.getMeasuredWidth();                    interpolatedProgress = mZInterpolator.getInterpolation(Math.abs(minScrollProgress));                }                float scale = (1 - interpolatedProgress) +                        interpolatedProgress * TRANSITION_SCALE_FACTOR;                float alpha;                if (isRtl && (scrollProgress > 0)) {                    alpha = mAlphaInterpolator.getInterpolation(1 - Math.abs(maxScrollProgress));                } else if (!isRtl && (scrollProgress < 0)) {                    alpha = mAlphaInterpolator.getInterpolation(1 - Math.abs(scrollProgress));                } else {                    //  On large screens we need to fade the page as it nears its leftmost position                    alpha = mLeftScreenAlphaInterpolator.getInterpolation(1 - scrollProgress);                }                v.setTranslationX(translationX);                v.setScaleX(scale);                v.setScaleY(scale);                if (v instanceof CellLayout) {                    ((CellLayout) v).getShortcutsAndWidgets().setAlpha(alpha);                } else {                    v.setAlpha(alpha);                }                // If the view has 0 alpha, we set it to be invisible so as to prevent                // it from accepting touches                if (alpha == 0) {                    v.setVisibility(INVISIBLE);                } else if (v.getVisibility() != VISIBLE) {                    v.setVisibility(VISIBLE);                }            }        }        public static class Accordion extends TransitionEffect {            public Accordion(Workspace workspace) {                super(workspace, TRANSITION_EFFECT_ACCORDION);            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                float scale = 1.0f - Math.abs(scrollProgress);                v.setScaleX(scale);                v.setPivotX(scrollProgress < 0 ? 0 : v.getMeasuredWidth());                v.setPivotY(v.getMeasuredHeight() / 2f);            }        }        public static class Flip extends TransitionEffect {            public Flip(Workspace workspace) {                super(workspace, TRANSITION_EFFECT_FLIP);            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                float rotation = -180.0f * Math.max(-1f, Math.min(1f, scrollProgress));                v.setCameraDistance(mWorkspace.mDensity * Workspace.CAMERA_DISTANCE);                v.setPivotX(v.getMeasuredWidth() * 0.5f);                v.setPivotY(v.getMeasuredHeight() * 0.5f);                v.setRotationY(rotation);                if (scrollProgress >= -0.5f && scrollProgress <= 0.5f) {                    v.setTranslationX(v.getMeasuredWidth() * scrollProgress);                } else {                    v.setTranslationX(0f);                }            }        }        public static class Cylinder extends TransitionEffect {            private boolean mIn;            public Cylinder(Workspace workspace, boolean in) {                super(workspace, in ? TRANSITION_EFFECT_CYLINDER_IN : TRANSITION_EFFECT_CYLINDER_OUT);                mIn = in;            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                float rotation = (mIn ? TRANSITION_SCREEN_ROTATION : -TRANSITION_SCREEN_ROTATION) * scrollProgress;                v.setPivotX((scrollProgress + 1) * v.getMeasuredWidth() * 0.5f);                v.setPivotY(v.getMeasuredHeight() * 0.5f);                v.setRotationY(rotation);            }        }        public static class Crossfade extends TransitionEffect {            public Crossfade(Workspace workspace) {                super(workspace, TRANSITION_EFFECT_CROSSFADE);            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                float alpha = 1 - Math.abs(scrollProgress);                v.setPivotX(v.getMeasuredWidth() * 0.5f);                v.setPivotY(v.getMeasuredHeight() * 0.5f);                v.setAlpha(alpha);            }        }        public static class Overview extends TransitionEffect {            private AccelerateDecelerateInterpolator mScaleInterpolator = new AccelerateDecelerateInterpolator();            public Overview(Workspace workspace) {                super(workspace, TRANSITION_EFFECT_OVERVIEW);            }            @Override            public void screenScrolled(View v, int i, float scrollProgress) {                float scale = 1.0f - 0.1f *                        mScaleInterpolator.getInterpolation(Math.min(0.3f, Math.abs(scrollProgress)) / 0.3f);                v.setPivotX(scrollProgress < 0 ? 0 : v.getMeasuredWidth());                v.setPivotY(v.getMeasuredHeight() * 0.5f);                v.setScaleX(scale);                v.setScaleY(scale);                mWorkspace.setChildAlpha(v, scale);            }        }    }

0 0
原创粉丝点击