zoukankan      html  css  js  c++  java
  • 侧滑菜单简单入门

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

      

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

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

      

  • 相关阅读:
    国外优秀的icon设计站点
    HDU 2289 Cup (二分)
    HDU 1709 The Balance (母函数 * *)
    HDU 2152 Fruit (母函数)
    POJ 3294 Life Forms (后缀数组)
    HDU 2152 选课时间(题目已修改,注意读题) (母函数)
    HDU 3278 Puzzle (蛋疼。。。。)
    HDU The Rotation Game
    HDU 2069 Coin Change (母函数 | 背包 )
    HDU 2899 Strange fuction (二分)
  • 原文地址:https://www.cnblogs.com/huaixiaohai2015/p/6602070.html
Copyright © 2011-2022 走看看