你的位置:首页 > 软件开发 > 操作系统 > QQ左侧滑动显示之按钮切换

QQ左侧滑动显示之按钮切换

发布时间:2015-05-01 00:00:20
上一篇为大家介绍了关于自定义属性设置方法,本篇我将为大家介绍一下如何通过按钮来控制Menu的显示和隐藏,为了达到这个效果我们需要在SlidingMenu中添加三个方法,用来达到实现上述效果的目的。  我们的SlidingMenu代码:public class SlidingMen ...

  上一篇为大家介绍了关于自定义属性设置方法,本篇我将为大家介绍一下如何通过按钮来控制Menu的显示和隐藏,为了达到这个效果我们需要在SlidingMenu中添加三个方法,用来达到实现上述效果的目的。

  我们的SlidingMenu代码:

public class SlidingMenu extends HorizontalScrollView {  private LinearLayout mWapper;  private ViewGroup mMenu;  private ViewGroup mContent;  private int mScreenWidth;//屏幕的宽度  private int mMenuWidth;//设置Menu的宽度    //dp  private int mMenuRightPadding;  private boolean once = false;  private boolean isOpen = false;//标示菜单的状态:隐藏  or 显示    public SlidingMenu(Context context) {    this(context, null);  }    /**   * 未使用自定义属性时调用此方法   * @param context   * @param attrs   */  public SlidingMenu(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }    /**   * 当使用了自定义的样式时调用   * @param context   * @param attrs   * @param defStyle   */  public SlidingMenu(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);        //获取我们定义的属性    TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SlidingMenu, defStyle, 0);    int n = a.getIndexCount();//获得设置的自定义属性个数    for(int i=0; i<n; i++){      int attr = a.getIndex(i);      switch (attr) {      case R.styleable.SlidingMenu_rightPadding:        mMenuRightPadding = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, context.getResources().getDisplayMetrics()));        break;      }    }    a.recycle();        WindowManager wm = (WindowManager) context.getSystemService(context.WINDOW_SERVICE);    DisplayMetrics outMetrics = new DisplayMetrics();    wm.getDefaultDisplay().getMetrics(outMetrics );    mScreenWidth = outMetrics.widthPixels;      }    /**   * 设置内部View的宽和高,以及自己的宽和高   */  @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    super.onMeasure(widthMeasureSpec, heightMeasureSpec);        if(!once){      mWapper = (LinearLayout) getChildAt(0);      mMenu = (ViewGroup) mWapper.getChildAt(0);      mContent = (ViewGroup) mWapper.getChildAt(1);      mMenuWidth = mMenu.getLayoutParams().width = mScreenWidth - mMenuRightPadding;      mContent.getLayoutParams().width = mScreenWidth;      once = true;    }      }  /**   * 设置子View的放置位置   * 通过设置偏移量来隐藏Menu   */  @Override  protected void onLayout(boolean changed, int l, int t, int r, int b) {    super.onLayout(changed, l, t, r, b);    if(changed){      this.scrollTo(mMenuWidth, 0);    }  }    /**   * 控制手指的滑动效果   */  @Override  public boolean onTouchEvent(MotionEvent ev) {    int action = ev.getAction();    switch (action) {    case MotionEvent.ACTION_UP:      int scrollx = getScrollX();//Menu左侧隐藏的区域宽度      if(scrollx >= mMenuWidth/2){        this.smoothScrollTo(mMenuWidth, 0);        isOpen = false;      }else{        this.smoothScrollTo(0, 0);        isOpen = true;      }      return true;    }    return super.onTouchEvent(ev);  }    /**   * 打开菜单   */  public void OpenMenu(){    if(isOpen){      return;    }else{      this.smoothScrollTo(0, 0);      isOpen = true;    }  }    /**   * 关闭菜单   */  public void CloseMenu(){    if(isOpen){      this.smoothScrollTo(mMenuWidth, 0);      isOpen = false;    }else{      return;    }  }    /**   * 切换菜单   */  public void Toggle(){    if(isOpen){      CloseMenu();    }else{      OpenMenu();    }  }  }

原标题:QQ左侧滑动显示之按钮切换

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录