`
jenly
  • 浏览: 18196 次
文章分类
社区版块
存档分类
最新评论

Android之SlidingPaneLayout侧滑效果扩展(SuperSlidingPaneLayout)

 
阅读更多

说到侧滑菜单,记得在很久很久以前,一说到侧滑菜单就会立刻想到SlidingMenu,在当时的印象里比较火的侧滑菜单就是SlidingMenu,最开始觉得那种效果还蛮新颖的,后来Google官方出了SlidingPaneLayout和DrawerLayout后,大部分的侧滑菜单效果也就基本被满足了。本博文主要讲到基于官方v4扩展包中的SlidingPaneLayout来扩展侧滑效果,我给SldingPaneLayout的扩展控件取了个好听的名字叫:SuperSlidingPaneLayout

说到侧滑效果扩展,这里主要用到了平移、缩放、等效果组合来达到想要的效果。

首先我们在SuperSlidingPaneLayout中定义一个枚举来表示不同的侧滑效果模式:

    public enum Mode {

        DEFAULT(0),
        TRANSLATION(1),
        SCALE_MENU(2),
        SCALE_PANEL(3),
        SCALE_BOTH(4),
        TRANSLATION_SCALE(5);

        private int mValue;

        Mode(int value){
            this.mValue = value;
        }

        private static Mode getFromInt(int value){

            for(Mode mode : Mode.values()){
                if(mode.mValue == value)
                    return mode;
            }

            return DEFAULT;
        }
    }

接着我们可以在SlidingPaneLayout源码中找到一个dispatchOnPanelSlide方法,其代码如下:

    void dispatchOnPanelSlide(View panel) {
        if (mPanelSlideListener != null) {
            mPanelSlideListener.onPanelSlide(panel, mSlideOffset);
        }
    }
从方法字面意思我们不难看出这是一个调度面板滑动的方法,说白了就是里面就是一个面板滑动的监听事件,我们可以通过(slidingPaneLayout.setPanelSlideListener)设置监听来监听面板的滑动情况,既然是扩展,就不想影响监听事件,这里我们在SuperSlidingPaneLayout中新增一个方法,代码如下:

    private void dispatchOnPanelMode(View panel, float slideOffset){
        if (mMenuPanel == null) {
            final int childCount = getChildCount();
            for (int i = 0; i < childCount; i++) {
                final View child = getChildAt(i);
                if (child != panel) {
                    mMenuPanel = child;
                    break;
                }
            }
        }
        final float scale = 1 - 0.2f * slideOffset;
        final float scaleLeft = 1 - 0.2f * (1 - slideOffset);
        switch (mMode){
            case TRANSLATION://平移效果
                mMenuPanel.setTranslationX((slideOffset-1) * mMenuPanel.getWidth());
                panel.setScaleX(1);
                panel.setScaleY(1);

                break;
            case SCALE_MENU://缩放菜单效果
                mMenuPanel.setPivotX(-0.2f * mMenuPanel.getWidth());
                mMenuPanel.setPivotY(mMenuPanel.getHeight() / 2.0f);
                mMenuPanel.setScaleX(scaleLeft);
                mMenuPanel.setScaleY(scaleLeft);
                panel.setScaleX(1);
                panel.setScaleY(1);

                break;
            case SCALE_PANEL://缩放面板效果
                panel.setPivotX(0);
                panel.setPivotY(panel.getHeight()/2.0f);
                panel.setScaleX(scale);
                panel.setScaleY(scale);

                break;
            case SCALE_BOTH://菜单面板都缩放效果
                mMenuPanel.setPivotX(-0.2f * mMenuPanel.getWidth());
                mMenuPanel.setPivotY(mMenuPanel.getHeight() / 2.0f);
                mMenuPanel.setScaleX(scaleLeft);
                mMenuPanel.setScaleY(scaleLeft);

                panel.setPivotX(0);
                panel.setPivotY(panel.getHeight()/2.0f);
                panel.setScaleX(scale);
                panel.setScaleY(scale);

                break;
            case TRANSLATION_SCALE://平移缩放效果
                mMenuPanel.setTranslationX((slideOffset-1) * mMenuPanel.getWidth() / 2.0f);
                mMenuPanel.setPivotX(-0.2f * mMenuPanel.getWidth());
                mMenuPanel.setPivotY(mMenuPanel.getHeight() / 2.0f);
                mMenuPanel.setScaleX(scaleLeft);
                mMenuPanel.setScaleY(scaleLeft);

                panel.setPivotX(0);
                panel.setPivotY(panel.getHeight()/2.0f);
                panel.setScaleX(scale);
                panel.setScaleY(scale);

                break;
            case DEFAULT://默认 即菜单固定
            default:
                panel.setPivotX(0);
                panel.setPivotY(0);
                panel.setScaleX(1);
                panel.setScaleY(1);

                break;
        }
    }
在这里简单说明下上面代码的意思,上面代码逻辑主要根据面板的偏移量来进行缩放、平移面板或菜单,达到不同的侧滑效果。
然后在dispatchOnPanelSlide中调用一下就可以了,代码如下:

    void dispatchOnPanelSlide(View panel) {
        dispatchOnPanelMode(panel,mSlideOffset);
        if (mPanelSlideListener != null) {
            mPanelSlideListener.onPanelSlide(panel, mSlideOffset);
        }
    }

这样几种不同的侧滑效果就完成了,有木有很简单?下面我们来看下最终的效果图:


SuperSlidingPaneLayout最新源码已上传至github欢迎Star和Fork。




分享到:
评论

相关推荐

    基于SlidingPaneLayout扩展的SuperSlidingPaneLayout设计源码

    SuperSlidingPaneLayout是一个基于Android原生的SlidingPaneLayout扩展设计的项目,包含54个文件,包括...该项目通过扩展SlidingPaneLayout,引入了多种新颖的侧滑效果,适用于需要丰富滑动交互界面的Android应用开发。

    android自带SlidingPaneLayout实现SlidingMenuLib效果

    在Android开发中,创建具有侧滑菜单效果的应用已经成为一种常见的设计模式。`SlidingPaneLayout`是Android SDK中提供的一种布局组件,它允许我们在主内容视图和一个可滑动的辅助视图之间进行交互,从而实现类似`...

    android 实现简单侧滑效果

    在Android开发中,实现简单的侧滑效果是常见的需求,尤其在设计导航菜单或者抽屉式界面时。侧滑效果通常涉及到布局管理器(Layout Manager)和触摸事件处理。本篇文章将详细讲解如何在Android中实现一个基本的侧滑...

    Android代码-SuperSlidingPaneLayout

    SuperSlidingPaneLayout是在SlidingPaneLayout的基础之上扩展修改,新增几种不同的侧滑效果,基本用法与SlidingPaneLayout一致。 引入 Maven: com.king.view superslidingpanelayout 1.1.0 pom Gradle: ...

    android 最简单的侧滑

    android ,最简单的侧滑,半天就搞定了,原来开发可以如此so easy。

    Android-侧滑菜单仿qq5.0版本的侧滑效果

    本教程将详细介绍如何在Android项目中实现一个仿QQ5.0版本的侧滑菜单效果,这涉及到Android的动画效果、布局管理和触摸事件处理等多个知识点。 首先,我们需要了解侧滑菜单的基本结构。它通常由两部分组成:主要...

    SlidingPaneLayout侧滑

    总之,`SlidingPaneLayout`是Android开发中实现侧滑抽屉效果的重要工具,通过合理的配置和使用,可以为应用程序增加丰富的交互体验。理解和掌握`SlidingPaneLayout`的工作原理和使用方法,对于提升应用的用户体验...

    ANDROID侧滑效果

    在Android开发中,侧滑效果通常指的是应用中的滑动导航菜单或者页面间的滑动切换,这种效果在现代移动应用设计中非常常见。Android系统提供了多种方式来实现这种侧滑效果,包括使用内置的库和自定义视图。下面将详细...

    android仿qq侧滑

    - SlidingPaneLayout是Android Support Library中的一个组件,专门用于实现侧滑效果,适用于平板设备或大屏幕手机。 - 使用FragmentTransaction可以方便地切换内容页面,实现类似QQ应用的功能切换。 总结来说,...

    android 侧滑删除本条

    在Android开发中,"侧滑删除本条"是一种常见的交互设计,主要用于列表或者卡片视图中,用户可以通过向左或向右滑动某一条目来触发删除操作。这种功能的实现主要依赖于`ViewDragHelper`这个辅助类,它是Android SDK...

    android:侧滑菜单效果

    总之,实现一个仿易信的侧滑菜单效果涉及多个Android UI组件和技术,包括`DrawerLayout`、`NavigationView`以及手势检测和动画处理。通过理解和掌握这些知识点,开发者可以创建出功能强大且用户体验优秀的Android...

    android 动画实现侧滑菜单效果

    在Android开发中,实现侧滑菜单效果是一种常见的交互设计,它可以提供用户友好的导航体验。本文将详细讲解如何使用动画来实现这一功能。 首先,侧滑菜单通常由一个主内容视图和一个隐藏的菜单视图组成。在用户触发...

    Android仿QQ侧滑菜单

    - QQ侧滑菜单的动画效果是其独特之处,可能包括平滑的过渡和自定义的过渡动画。这可以通过自定义`DrawerLayout`的行为或者使用`ObjectAnimator`等动画工具来实现。 - `DrawerLayout`提供了一些内置的动画效果,但...

    安卓音乐播放器相关-仿酷狗菜单栏侧滑效果支持手势快速滑动打开或者关闭打开或关闭时有阴影和缩放效果.rar

    在安卓应用开发中,创建一个类似酷狗音乐的菜单栏侧滑效果是提升用户体验的重要一环。这个压缩包文件提供了一个实现这一效果的示例,它包含手势识别、阴影效果和视图缩放等关键元素。以下是这个项目涉及的一些核心...

    Android实现QQ侧滑菜单效果

    Android实现QQ侧滑菜单效果是指在Android平台上实现类似于QQ侧滑菜单的滑动效果,该效果可以在Android应用程序中使用,具有很高的参考价值。下面是Android实现QQ侧滑菜单效果的知识点总结: 一、布局文件设定 在...

    Android qq侧滑效果

    在Android应用开发中,"QQ侧滑效果"是一种常见的交互设计,它为用户提供了便捷的导航方式,使得用户可以通过从屏幕边缘向内滑动来显示或隐藏附加菜单。这种效果在许多应用程序中都能看到,包括早期的QQ版本,它极大...

    android实现三种侧滑菜单(qq5.0,抽屉侧滑,普通侧滑)

    通过设置`SlidingPaneLayout`的子视图和相应的手势监听器,可以创建出类似QQ5.0的侧滑效果。同时,要确保头部视图的宽度适应屏幕,侧边栏宽度足够显示所有选项。 其次,抽屉式侧滑菜单,也被称为导航抽屉,是...

    Android-简单通讯录侧滑效果Demo.rar

    《Android-简单通讯录侧滑效果Demo》 在Android应用开发中,用户界面的设计与交互体验至关重要。一个优秀的通讯录应用不仅需要提供基础的联系人管理功能,还应该具有吸引人的视觉效果和流畅的操作体验。本Demo——...

    android 侧滑菜单-实例代码

    然而,`SlidingPaneLayout`并不完全适用于侧滑菜单,因为它没有内置的抽屉效果和手势检测。 2. `DrawerLayout`:这是Android官方推荐用来实现侧滑菜单的组件。`DrawerLayout`有一个特性,就是它可以将一个或两个子...

Global site tag (gtag.js) - Google Analytics