注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的个人博客

欢迎访问我的网站www.shaccp.cn,学习软件编程

 
 
 

日志

 
 

Android 实现形态各异的自定义双向侧滑菜单2  

2014-10-15 17:11:09|  分类: android学习笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

本文由上海java培训机构推荐阅读,更多精彩请浏览上海it培训机构。

二、代码是最好的老师

1、布局文件

既然是双向菜单,那么我们的布局文件是这样的:

布局文件1

最外层是我们的自定义的BinarySlidingMenu,内部一个水平方向的LinearLayout,然后是左边的菜单,内容区域,右边的菜单布局~~

关键就是我们的BinarySlidingMenu

2、BinarySlidingMenu的构造方法

01/**
02  * 屏幕宽度
03  */
04 private int mScreenWidth;
05/**
06  * dp 菜单距离屏幕的右边距
07  */
08 private int mMenuRightPadding;
09 public BinarySlidingMenu(Context context, AttributeSet attrs, int defStyle)
10{
11 super(context, attrs, defStyle);
12mScreenWidth = ScreenUtils.getScreenWidth(context);
13TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
14 R.styleable.BinarySlidingMenu, defStyle, 0);
15 int n = a.getIndexCount();
16 for (int i = 0; i < n; i++)
17{
18 int attr = a.getIndex(i);
19 switch (attr)
20{
21 case R.styleable.BinarySlidingMenu_rightPadding:
22// 默认50
23mMenuRightPadding = a.getDimensionPixelSize(attr,
24 (int) TypedValue.applyDimension(
25TypedValue.COMPLEX_UNIT_DIP, 50f,
26 getResources().getDisplayMetrics()));// 默认为10DP
27 break;
28}
29}
30a.recycle();
31}

我们在构造方法中,获取我们自定义的一个属性rightPadding,然后赋值给我们的成员变量mMenuRightPadding;关于如何自定义属性参考侧滑菜单的第一篇博文,这里就不赘述了。

3、onMeasure

onMeasure中肯定是对侧滑菜单的宽度、高度等进行设置:

01@Override
02 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
03{
04/**
05  * 显示的设置一个宽度
06  */
07 if (!once)
08{
09 mWrapper = (LinearLayout) getChildAt(0);
10 mLeftMenu = (ViewGroup) mWrapper.getChildAt(0);
11 mContent = (ViewGroup) mWrapper.getChildAt(1);
12 mRightMenu = (ViewGroup) mWrapper.getChildAt(2);
13mMenuWidth = mScreenWidth - mMenuRightPadding;
14 mHalfMenuWidth = mMenuWidth / 2;
15mLeftMenu.getLayoutParams().width = mMenuWidth;
16mContent.getLayoutParams().width = mScreenWidth;
17mRightMenu.getLayoutParams().width = mMenuWidth;
18}
19 super.onMeasure(widthMeasureSpec, heightMeasureSpec);
20}

可以看到我们分别给左侧、右侧的菜单设置了宽度(mScreenWidth - mMenuRightPadding);

宽度设置完成以后,肯定就是定位了,把左边的菜单弄到左边去,右边的菜单放置到右边,中间依然是我们的内容区域,那么请看onLayout方法~

4、onLayout

01@Override
02 protected void onLayout(boolean changed, int l, int t, int r, int b)
03{
04 super.onLayout(changed, l, t, r, b);
05 if (changed)
06{
07// 将菜单隐藏
08 this.scrollTo(mMenuWidth, 0);
09 once = true;
10}
11}
  评论这张
 
阅读(5)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017