文档章节

SlidingMenu 源码分析

精通吹水
 精通吹水
发布于 2016/01/03 18:20
字数 415
阅读 343
收藏 3

SlidingMenu 源码分析

    SlidingMenu 是github上hot android 开源控件之一。现来简要的分析一下SlidingMenu实现分析。SlideMenu源码地址:https://github.com/jfeinstein10/SlidingMenu 

基本类介绍

    

    SlidingMenu:用于控制Menu和Content页面的容器。

    CustomViewBehind:存放菜单的容器

    CustomViewAbove:存放主要页面的容器,核心类,基本上滑动操作都在这个类中实现。

偷天换日

    SlidingMenu#attachToActivity() 函数是使得SlidingMenu进行开始工作的函数。核心代码如下:


是的,它将RootView的第一个子View进行替换,使用自己作为父容器。这样子,就完成了加入Menu到ViewTree的操作,并且注意setContent函数:

    是的,使用CustomViewAbove mViewAbove代理的真正的页面。So,可以联想,CustomViewBehind也代理了Menu部分。

屏幕事件处理

    通过搜索,可以发现在SlidingMenu和CustomViewBehind中,并没有对onTouchEvent进行扩展,虽然SldingMenu是父容器。而查询CustomViewAbove#onTouchEvent可以发现长长的代码。So,基本上可以确定滑动菜单处理的代码基本在这里。滑动核心代码如下(MotionEvent.ACTION_MOVE事件):

    长长的一串代码,我也没有搞清楚怎么算的,大致意思就是算出显示Menu的X,也就是scrollX的距离,最后通过scrollTo 函数,完成了滚动的过程。

神奇的ScrollTo

       CustomViewAbove#scollTo 是重写了父方法,加入了自定义的内容,就是通知菜单部分:“哥们,你出来把!”,而scrollTo的函数分析,可以见另外一篇介绍滚动的文章 http://my.oschina.net/u/1999248/blog/591437 (android ScrollView 滚动机制)

© 著作权归作者所有

上一篇: RESTful SPA 杂谈
下一篇: 二进制
精通吹水
粉丝 18
博文 56
码字总数 55035
作品 0
人事招聘
私信 提问
推荐使用的SlidingMenu组件

使用SlidingMenu的时候必须依赖两个组件: ActionBarSherlock: Action Bar是Android 3.0后才开始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的所有平台,而且他会自动的判断是调用...

i_bobby
2013/09/26
0
8
Android开源项目SlidingMenu深切解析

原文地址:http://www.byywee.com/page/M0/S912/912002.html SlidingMenu简介: SlidingMenu的是一种斗劲新的设置界面或设备界面结果,在主界面左滑或者右滑呈现设置界面,能便利的进行各类操...

末日__
2013/12/05
0
1
SlidingMenu属性详解

SlidingMenu简介: SlidingMenu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面,能方便的进行各种操作.目前有大量的应用都在使用这一效果。如Evernote、Google+...

开源中国首席体验师
2014/02/18
0
0
Android-Slidingmenu-example的配置

Slidingmenu目前比较流行,今天自己也从网上找了一些开源的Slidingmenu实现,主要有项目有: https://github.com/jfeinstein10/SlidingMenu/ https://github.com/JakeWharton/ActionBarSherlock......

hi_boo
2013/05/28
0
0
【Android】SlidingMenu属性详解

简单记下属性。 SlidingMenu 常用属性介绍: menu.setMode(SlidingMenu.LEFT);//设置左滑菜单 menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏...

程序袁_绪龙
2015/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

浅析大数据 学习大数据后能做什么

大数据时代的到来使得大数据开发人才迎来了前所未有的机遇和挑战!一个绝佳的入行机会摆在了众人面前!于是,很多人都在打听,大数据到底有何应用?可以用来做什么?好程序员今天就为大家作出...

好程序员IT
20分钟前
1
0
C# USB视频人脸检测

此程序基于 虹软人脸识别进行的开发 SDK下载地址:https://ai.arcsoft.com.cn/ucenter/user/reg?utm_source=csdn1&utm_medium=referral 前提条件 从虹软官网下载获取ArcFace引擎应用开发包,...

是哇兴哥棒棒哒
31分钟前
2
0
Vagrant虚拟机硬盘扩容

# 停止虚拟机vagrant halt <machine_name># 进入VirtualBox VMs目录,查看并记录原磁盘uuid,留作后用vboxmanage showhdinfo box-disk1.vmdk# 克隆磁盘,vmdk格式无法调整大小,需要...

sskill
32分钟前
1
0
分布式商业萌芽,银行迎来发展新机遇

01 分布式商业萌芽,银行迎来发展新机遇 金融界:近几年区块链的热度经历了过山车般的转折。目前追逐区块链的资本也开始冷静下来,于此同时,各大商业银行对区块链的研究应用也越来越多。您认...

Java领航员
38分钟前
3
0
Spring系列教程六: Spring jdbcTemplate在Dao中的使用

概念 Spring中的jdbcTemplate的主要作用是实现数据的交互,下面我们就在dao层中如何使用jdbctemplate写测试案例 项目目录如下 基于xml实现jdbctemplate 这里我们使用的是JdbcDaoSupport这个类...

我叫小糖主
41分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部