czxzx2014 2016-05-10 15:54 采纳率: 15.4%
浏览 1212

关于Android Slidemenu的问题

public class SlideMenu extends HorizontalScrollView{

private LinearLayout mWapper;
private ViewGroup mMenu;
private ViewGroup mContent;
private int mScreenWidth;
private int mMenuRightPadding;
private int mMenuWidth = 0;

private boolean once = false;
//Menu是否处于显示状态
private boolean isSlideOut;

public static final int RIGHT_PADDING = 100;

public SlideMenu(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics metrics = new DisplayMetrics();
    wm.getDefaultDisplay().getMetrics(metrics);
    mScreenWidth = metrics.widthPixels;
    //将dp转化为px
    mMenuRightPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, SlideMenu.RIGHT_PADDING, context.getResources().getDisplayMetrics());
}

/**
 * 设置子View的宽和高
 * 设置自己的宽和高
 */
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // TODO Auto-generated method stub
    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;
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
/**
 * 通过设置偏移量将Menu隐藏
 */
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    // TODO Auto-generated method stub
    super.onLayout(changed, l, t, r, b);
    if(changed){
        this.scrollTo(mMenuWidth, 0);
    }
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
    // TODO Auto-generated method stub
    int action = ev.getAction();
    switch (action) {
        case MotionEvent.ACTION_UP:
            //隐藏在左边宽度
            int scrollX = getScrollX();
            if(scrollX >= mMenuWidth /2){
                //Menu 左滑隐藏起来
                this.smoothScrollTo(mMenuWidth, 0);
                isSlideOut = false;
            }else{
                //Menu 右滑 显示出来
                this.smoothScrollTo(0, 0);
                isSlideOut = true;
            }
            return true;
    }
    return super.onTouchEvent(ev);
}
/**
 * 向右滑出菜单显示出来
 */
public void slideOutMenu(){
    if(!isSlideOut){
        this.smoothScrollTo(0, 0);
        isSlideOut = true;
    }else{
        return;
    }
 }  
/**
 * 向左滑出菜单隐藏起来 
 */
public void slideInMenu(){
    if(isSlideOut){
        this.smoothScrollTo(mMenuWidth, 0);
        isSlideOut = false;
    }else{
        return;
    }
}
/**
 * 切换菜单向右滑出显示或向左滑出隐藏的状态
 */
public void switchMenu(){
    if(isSlideOut){
        slideInMenu();
    }else{
        slideOutMenu();
    }
}
 public class MainActivity extends Activity {
    //这个是声明一个自定义的那个控件
    private SlideMenu xcSlideMenu;
    //这个是声明页面上的头像的那个image控件的ID
    private TextView btnSwitch;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_main);
        xcSlideMenu = (SlideMenu) findViewById(R.id.slideMenu);
        btnSwitch = (TextView)findViewById(R.id.btnSwitch);
        //给声明的image控件添加点击监听事件
        btnSwitch.setClickable(true);
        btnSwitch.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 表示点击触发控件内部的右划和左划的事件
                xcSlideMenu.switchMenu();
                //btnSwitch.setVisibility(View.INVISIBLE);
            }
        });

    }

上面是相关的类
在主活动的界面中可以滑动,也可以按动btnSwitch来实现侧滑,想请教各位大神如何关闭手势滑动,而仅用按钮来实现滑动
图片说明

  • 写回答

2条回答

  • czxzx2014 2016-05-10 15:55
    关注

    谢谢各位大神指教

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?