侧滑菜单简单入门
因为学这个的时候,正好是想要学习一些android常见的控件属性,那时候想要学会一下侧滑,不过学会之后,自己写的那个东西也已经告一段落了,那时候要是在百度上面找到了一个比较简单的侧滑入门的话,也许就可以将侧滑这个看起来“很难的”技术添加进去了。
首先既然是侧滑菜单,由于自己写的是自定义方式的侧滑菜单,所以自己要先新建一个侧滑对象类,这个对象继承了HorizontalScrollView。在初始化这个类的时候i,先获取到屏幕的宽度,然后再设置一下,当菜单完全展开的时候,后面的内容还有多少是处于显示状态的。
获取手机的宽度:
WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); // 将当前系统的参数传入带dm当中 wm.getDefaultDisplay().getMetrics(dm); // 获取手机屏幕的宽度 mScreenWidth = dm.widthPixels;
设置菜单完全展开时候,内容还有多少是出于显示状态的:
// 菜单完全显示距离右边的距离,因为是菜单,所以逻辑上面是不能完全覆盖住内容的 mRightMenuWidth = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 100, context.getResources() .getDisplayMetrics());
由于是自定义侧滑菜单类,因此需要重写几个方法,以适应自己的侧滑功能。分别是
onMeasure()、onLayout()、onTouchEvent()
这三个方法。
onMeasure()方法重写
在这个方法里面进行一些基本的配置工作,这个准备只执行一次。
先获取到这个类的第一个布局文件mWapper = (LinearLayout) getChildAt(0);
然后根据这个父布局得到菜单布局以及主体内容布局。
// 获取菜单对象
mMenu = (ViewGroup) mWapper.getChildAt(0);
// 获取内容对象
mContent = (ViewGroup) mWapper.getChildAt(1);
onLayout(): 在这个方法进行当布局发生变化时候的响应动作 if (changed)// 判断当前位置是否发生了变化,将菜单完全展示 this.scrollTo(mMenuWidth, 0);
onTouchEvent: 在这个里面进行对滑动距离大小来做相对应的处理,先判断当前 的滑动已经结束,然后得到当前的偏移量int scrollX = getScrollX(); 将这个偏移量与菜单大小的二分之一进行比较,若是大于,则将菜单进行 完全展示,否则将隐藏菜单,为了避免展示和隐藏显得太过突兀,因此 采用的是缓慢的进行变化。
case MotionEvent.ACTION_UP://滑动结束
// 计算当前的滑动距离
int scrollX = getScrollX();
if (scrollX >= mMenuWidth / 2)// 滑动的距离超过菜单栏的一半,显示全部菜单栏
this.smoothScrollTo(mMenuWidth, 0);
else
// 隐藏菜单栏
this.smoothScrollTo(0, 0);
return true;
以上这个是java代码的编写自定义侧滑类的主要代码,下面说一下布局文件吧
最外层是你这个类的绝对路径。可以根据自己的实际情况进行修改:
<com.huaixiaohai.view.SlidingMenuView android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/img_frame_background" android:orientation="horizontal" > <include layout="@layout/left_menu" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/qq" > </LinearLayout> </LinearLayout> </com.huaixiaohai.view.SlidingMenuView>
可以很明显地看出来,最外层是自己写的自定义类的路径。 然后内层是一个LinearLayout布局,因为这个类是继承于HorizontalScrollView, 而HorizontalScrollView下面只允许有一个直接子布局,因此这里 使用了LinearLayout将菜单布局以及主体布局进行包含。
怎么使用呢?这点相信也是比较关注的吧,其实就和普通的一样就是;
调用的时候很简单,就是正常的实例化一个对象,或者称之为将布局控件 与自己定义的控件进行绑定。因为侧滑功能已经在自定义类中已经实现了,所以 可以看作是这个类的一个无须创建的功能即可。