Android开源SlidingMenu的使用

本文详细介绍 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)));
             }          
         }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值