百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

深入浅出SlidingMenu

csdh11 2025-03-11 14:50 19 浏览

如果想直接查看源码的话可以从我的Github上下载查看:
https://github.com/zhanghuijun0/demo-for-android/tree/master/SlidingMenu

SlidingMenu 是github上Android开源项目 能用于快速集成 Android 侧滑菜单效果,Slidingmenu 里面可以包含多种组件 fragment viewpager listview 等;

注意:SlidingMenu依赖于另一个开源项目ActionBarSherlock,所以需要将ActionBarSherlock添加作为SlidingMenu的库工程,否则会报资源找不到错误。

依赖关系如下:ExampleListActivity——>library——>actionbarsherlock

经常出现的问题:

(1)添加完了依赖关系之后,会报出“Jar mismatch! Fix your dependencies”的错误,这是因为android-support-v4.jar版本不匹配造成的。(解决办法,把所依赖的android-support-v4.jar删除,重新添加新的,当然也可以从其中一个项目中,复制到另外的项目中,目的是android-support-v4.jar版本要一样就ok了)

(2)library 当中还存在错误:找不到
getSupportActionBar.setDisplayHomeAsUpEnabled(true);

解决办法:找到Library中的src下找到
SlidingFragmentActivity.java,修改父类,将:

public class SlidingFragmentActivity extends FragmentActivity 

修改为:

public class SlidingFragmentActivity extends SherlockFragmentActivity

然后按照依赖关系依次clean: actionbarsherlock、library、ExampleListActivity

至此,一个SlidingMenu的简单Demo就已经导入成功了,下面我们就可以看到SlidingMenu的效果了,如果你感觉以上步骤比较麻烦的话,可以直接下载我已经配置好的:

配置完成,我们需要自己动手写一些SlidingMenu的demo,首先为新建的项目添加library,下面展示了一个简单的SlidingMenu的代码,只有几行代码就可以实现一个简单的SlidingMenu效果了。

 1 // configure the SlidingMenu
 2 SlidingMenu menu = new SlidingMenu(this);
 3 menu.setMode(SlidingMenu.LEFT);
 4 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
 5 menu.setShadowWidthRes(R.dimen.shadow_width);
 6 menu.setShadowDrawable(R.drawable.shadow);
 7 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
 8 menu.setFadeDegree(0.35f);
 9 menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
10 menu.setMenu(R.layout.slide_menu);

上面的SlidingMenu可能有点简单了,下面是我对SlidingMenu属性的一些总结,可能不是很完整,如果需要完整的话,查看SlidingMenu在Github给出的Demo;

 1 // configure the SlidingMenu
 2 menu = new SlidingMenu(this);
 3 
 4 menu.setMode(SlidingMenu.LEFT);// 设置左滑菜单
 5 
 6 // menu.setMode(SlidingMenu.LEFT_RIGHT);// 属性,然后设置右侧菜单的布局文件
 7 // menu.setSecondaryMenu(R.layout.activity_main);
 8 // menu.setSecondaryShadowDrawable(R.drawable.shadow);// 右侧菜单的阴影图片
 9 
10 /**
11  * 设置滑动的区域
12  */
13 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);// 全屏都可以
14 //        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);// 旁边可以
15 //        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);// activity界面都不可以
16 
17 
18 /**
19  * 阴影
20  */
21 menu.setShadowWidth(200);// 设置阴影宽度
22 menu.setShadowWidthRes(R.dimen.shadow_width);// 设置阴影图片的宽度
23 menu.setShadowDrawable(R.drawable.shadow);// 设置阴影图片
24 
25 /**
26  * 淡入淡出
27  */
28 menu.setFadeEnabled(true);// 是否淡入淡出
29 menu.setFadeDegree(0.35f);// 设置淡入淡出的比例
30 
31 menu.setBehindScrollScale(0.2f);// 设置滑动时 的拖拽效果
32 menu.setBehindWidth(400);// 设置SlidingMenu菜单的宽度
33 menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);// SlidingMenu划出时主页面显示的剩余宽度
34 
35 menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);// 使SlidingMenu附加在Activity上
36 menu.setMenu(R.layout.slide_menu);// 设置menu的布局文件
37 
38 CanvasTransformer mTransformer = new CanvasTransformer {
39     @Override
40     public void transformCanvas(Canvas canvas, float percentOpen) {
41         float scale = (float) (percentOpen * 0.25 + 0.75);
42         canvas.scale(scale, scale, canvas.getWidth / 2,
43 canvas.getHeight / 2);
44     }
45 };
46 menu.setBehindCanvasTransformer(mTransformer);// 左滑或右滑自定义动画

SlidingMenu的其他属性,其他人已经总结的很好了,我这里就不再赘述了,如果需要的话,参照以下地址。

【Android】SlidingMenu属性详解
:http://www.cnblogs.com/SharkBin/p/3665548.html

Android slidingmenu详解 优化侧滑
:http://blog.csdn.net/aaawqqq/article/details/44121577

相关推荐

教学楼里那种嵌着小石子的水磨石地面,是怎么整出来的? | 有趣的制造

今天的选题是之前小可爱「花凉」在后台发消息问的~看过以后念念不忘,满脑子都是小时候在教学楼冰冷地面上摔的跤,记不起来是不是在这种地面上磕掉的门牙...昨天发了预告后,有小可爱纷纷表示「就是这种地板,像...

教学楼里那种嵌着小石子的水磨石地面,是怎么整出来的?

话说有多少小可爱不想学习时,没事数着水磨石地面的小石子玩,然后互相评比哪颗石子最好看。到头来书又没有背完,课也没好好上,就怪地板有迷幻效果,扰乱了好好学习的坚定意志。(小编觉得即使换成瓷砖,你们也可能...

性能调优实战:Spring Boot 多线程处理SQL IN语句大量值的优化方案

环境:SpringBoot3.4.0...

RMAN备份监控及优化总结(rman全备份)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

记Oracle中快速获取表及其各个字段注释的方法

简述java开发中,用过JPA的道友应该知道,我们可以通过写java代码自动生成对应的数据表;但这有个问题是,列名的注释并没有帮我们一起添加到数据库去,尤其在一些开发测试生产三个环境隔离的,就很不友好...

Oracle 数据库日常巡检之检查数据库cpu、I/O、内存性能

记录数据库的cpu使用、IO、内存等使用情况,使用vmstat,iostat,sar,top等命令进行信息收集并检查这些信息,判断资源使用情况。1.CPU使用情况:...

Oracle案例:ORA-00600: internal error code, arguments: 「4187」

本案例客户来自某省电信,alert日志大量的ORA-00600[4187]报错,已经影响到业务正常运行。...

MySQL索引失效的10大陷阱:从隐式类型转换到索引选择性全面优化

索引是MySQL性能优化的核心武器,但错误的使用场景可能让索引完全失效,导致查询性能断崖式下降。本文通过实际案例,深入剖析索引失效的典型场景及其底层原理,并提供可落地的解决方案。一、索引失效的核心原...

oracle查询语句执行计划分析(oracle如何查看sql执行计划)

1命令行开启配置#显示查询结果setautotraceon#不显示查询结果setautotracetraceonly2执行查询语句...

面试官:说说Oracle数据库result cache的原理是什么?

概述前面已经用实验给大家介绍了ResultCache相关内容,今天主要讨论一下Oracle11gResultCache的深层原理。从参数看,Oracle提供了ClientResultCac...

Oracle817 export 时ORA-06553和ORA-00904处理

现象:数据库版本8.1.7...

Oracle案例:一次gc buffer busy acquire诊断

本案例来自某客户两节点rac的一次生产故障,现象是大面积的gcbufferbusyacquire导致业务瘫痪。...

说文解字:“雪”字本身在造字时就很浪漫!

这是雪山的“雪”字。可是你知道吗?“雪”这个字其实和“山”是没有任何关系的。这个字下半部分“彐”并不是一座翻倒的山,而是一只手的意思。(凡是带“彐”的汉字,其实都和手有关。)“雪”字的商代甲骨文形状,...

应用最广的两类数据库的区别、优势对比、查询优化方法及案例实践

 1、通用数据库分类  1.1关系型数据库  关系型数据库是多个二维数据表的集合,数据以二维数据表的形式进行存储,数据表之间可以通过应用程序或者数据的主、外键建立特定的关联关系,让数据之间存在特定的...

【SQL】SQL 语法差异大全(PgSQL/MySQL/Oracle/TiDB/OceanBase)

以下是针对不同数据库系统的SQL语法差异总结,按功能分类展示:一、基础查询1.分页查询...