一、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

最新文章

  1. Oracle读取excel
  2. 测试秒杀新版本3.5 stieserver cms
  3. 黑马程序员——OC语言 其他语法
  4. java控制台输入
  5. jquery tab
  6. 【Todo】所有Locked的题目的分析解答
  7. NullableKey:解决Dictionary中键不能为null的问题 zt
  8. theano中对图像进行convolution 运算
  9. matlab 全部的随机数函数
  10. hibernate联合主键注解配置
  11. 学习笔记之--MySQL图形界面软件Navicat Premium的安装
  12. struts2的防止表单重复提交
  13. xtrabackup全量备份和增(差)量备份
  14. 657. Robot Return to Origin
  15. XamarinEssentials教程应用程序信息AppInfo
  16. Vue遇到的一些小坑
  17. 【Spring】Spring+struts2+Hibernate框架的搭建
  18. 无法打开文件“atlsd.lib”
  19. R语言中Fisher判别的使用方法
  20. 最短路+状态压缩dp(旅行商问题)hdu-4568-Hunter

热门文章

  1. 通过node指令自动创建一个package.json文件,并封装发布使用
  2. MyEclipse 2013 破解
  3. Spring Cloud 入门概括介绍
  4. Almost Increasing Array CodeForces - 946G (dp)
  5. 用Kindle阅读PDF最简单的3个方法!
  6. C#获取局域网主机
  7. npm学习(七)之如何发布包、更新发布包、删除发布包
  8. [转载]C / C++ 计算程序运行的时间
  9. Python3 A*寻路算法实现
  10. CentOS7 yum安装配置 +redis主从配置