https://github.com/hustcc/canvas-nest.js

侧滑菜单简单入门

        因为学这个的时候,正好是想要学习一些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将菜单布局以及主体布局进行包含。

  

怎么使用呢?这点相信也是比较关注的吧,其实就和普通的一样就是;

		调用的时候很简单,就是正常的实例化一个对象,或者称之为将布局控件
	
	与自己定义的控件进行绑定。因为侧滑功能已经在自定义类中已经实现了,所以
	
	可以看作是这个类的一个无须创建的功能即可。

  

 

posted @ 2017-03-22 21:03  坏小孩不坏  阅读(303)  评论(0编辑  收藏  举报