• Android开源SlidingMenu的使用


    一、SlidingMenu简介

    SlidingMenu是最常用的几个开源项目之一.

    GitHub上的开源项目Slidingmenu提供了最佳的实现:定制灵活、各种阴影和渐变以及动画的滑动效果都不错。不过这是一个开源库,要把它作为library引入到你自己的工程里,简单配置一下就可以实现SlidingMenu的效果。

    二、项目的导入



    三、具体实现

    你可以直接继承app这个包中的SlidingActivity,SlidingFragmentActivity,SlidingListActivity等这几个类去实现这个效果,或直接在项目中初始化SlidingMenu,并进行配置后使用。

    1、项目中初始化SlidingMenu

    1
    2
    3
    4
    5
    6
    7
    8
    9
            SlidingMenu menu = new SlidingMenu(this);
            menu.setMode(SlidingMenu.LEFT);
            menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
            menu.setShadowWidthRes(R.dimen.shadow_width);
            menu.setShadowDrawable(R.drawable.shadow);
            menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
            menu.setFadeDegree(0.35f);
            menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
    <span style="white-space:pre">  </span>menu.setMenu(R.layout.menu);

    其中可以在setMenu()前这样实现:

    View view = LayoutInflater.from(this).inflate(R.layout.menu, null);
    menu.setMenu(view);

    这样就可以直接操作menu布局中的控件了。

    2、SlidingFragmentActivity的实现

    主类继承SlidingFragmentActivity。 因为SlidingFragmentActivity里面已集成了SlidingMenu,所以可以通过getSlidingMenu()可以获取到一个SlidingMenu对象,然后像下面的代码一样设置常用的属性就可以l

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <span style="white-space:pre">      </span>// 设置存放侧滑栏的容器的布局文件
            setBehindContentView(R.layout.menu);
            // 将侧滑栏的fragment类填充到侧滑栏的容器的布局文件中
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            Fragment fragment = new MenuFragment();
            transaction.replace(R.id.menu_fragment, fragment);
            transaction.commit();
             
            SlidingMenu sm = getSlidingMenu();
            sm.setShadowWidth(0);
            sm.setShadowDrawable(R.drawable.shadow);
            // 设置侧滑栏完全展开之后,距离另外一边的距离,单位px,设置的越大,侧滑栏的宽度越小
            sm.setBehindOffset(100);
            // 设置渐变的程度,范围是0-1.0f,设置的越大,则在侧滑栏刚划出的时候,颜色就越暗。1.0f的时候,颜色为全黑
            sm.setFadeDegree(0.3f);
            // 设置触摸模式,可以选择全屏划出,或者是边缘划出,或者是不可划出
            sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
            //设置actionBar能否跟随侧滑栏移动,如果没有,则可以去掉
            setSlidingActionBarEnabled(false);



     

    3、双侧滑栏

    我们可以通过下面的代码实现双侧滑栏的效果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <span style="white-space:pre">      </span>// 设置左边的侧滑栏
            getSlidingMenu().setMode(SlidingMenu.LEFT_RIGHT);
            getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
            setContentView(R.layout.content_frame);
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.content_frame, new SampleListFragment()).commit();
            // 设置右边的侧滑栏
            getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two);
            getSlidingMenu().setSecondaryShadowDrawable(R.drawable.shadowright);
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.menu_frame_two, new SampleListFragment())
                    .commit();



    4、设置触摸模式


    通过getSlidingMenu().setTouchModeAbove()可以设置侧滑栏的触摸模式,用下面3个常量值:
    SlidingMenu.TOUCHMODE_FULLSCREEN 全屏幕模式,全屏滑动都可打开


    SlidingMenu.TOUCHMODE_MARGIN 侧边模式,只在屏幕侧边滑动才能打开,中心滑动不能打开


    SlidingMenu.TOUCHMODE_NONE 禁止触摸模式,不能够通过触摸打开,只能够通过SlidingMenu().toggle()打开或者是关闭


    5、设置侧滑栏显示动画

    通过SlidingMenu.setbehindCanvasTransformer(CanvasTransformer);方法可以设置侧滑栏的显示动画,参数是一个CanvasTransformer对象。下面是几个常见的动画的设置:
    折叠动画:

    1
    2
    3
    4
    5
    6
    new CanvasTransformer() {
                @Override
                public void transformCanvas(Canvas canvas, float percentOpen) {
                    canvas.scale(percentOpen, 1, 0, 0);
                }          
            }



    缩放动画:

    1
    2
    3
    4
    5
    6
    7
    new CanvasTransformer() {
                @Override
                public void transformCanvas(Canvas canvas, float percentOpen) {
                    float scale = (float) (percentOpen*0.25 + 0.75);
                    canvas.scale(scale, scale, canvas.getWidth()/2, canvas.getHeight()/2);
                }
            

    上升动画:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private static Interpolator interp = new Interpolator() {
            @Override
            public float getInterpolation(float t) {
                t -= 1.0f;
                return t * t * t + 1.0f;
            }      
        };
     
    new CanvasTransformer() {
                @Override
                public void transformCanvas(Canvas canvas, float percentOpen) {
                    canvas.translate(0, canvas.getHeight()*(1-interp.getInterpolation(percentOpen)));
                }          
            }
     

    推推族,免费得门票,游景区:www.tuituizu.com

    结伴旅游,一个免费的交友网站:www.jieberu.com

  • 相关阅读:
    Timer 实现2秒4秒连环炸
    Java中的注解
    PHP连接打印机
    php同步mysql两个数据库中表的数据
    thinkphp 两表、三表联合查询
    ereg/eregi报错处理办法
    ThinkPHP3.2判断手机端访问并设置默认访问模块的方法
    使用PHP获取时间今天 明天 昨天 时间戳的详解
    jquery获取radio和select选中值
    php开启mysqli扩展之后如何连接数据库
  • 原文地址:https://www.cnblogs.com/rabbit-bunny/p/4213310.html
Copyright © 2020-2023  润新知