2 cc222014 cc222014 于 2016.05.10 23:54 提问

关于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来实现侧滑,想请教各位大神如何关闭手势滑动,而仅用按钮来实现滑动
图片说明

3个回答

cc222014
cc222014   2016.05.10 23:55

谢谢各位大神指教

CSDNXIAON
CSDNXIAON   2016.05.11 00:02

android 滑动侧边栏 SlideMenu
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

andriodmasite
andriodmasite   2016.05.11 08:23

onTouchEvent 这部分代码就是手势操作控制滑动界面的。你把这部分代码注掉就行了

cc222014
cc222014 你好,还是不行。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!