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 你好,还是不行。
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
SlideMenu屏蔽滑动问题
刚开始需要支持SlideMenu滑动的,后台和当前的activity的主界面滑动事件冲突,然后想屏蔽掉SlideMenu的滑动功能,只支持按钮的形式 setTouchModeAbove();是设置当前的滑动模式有很多 SlidingMenu.TOUCHMODE_FULLSCREEN 全屏手势SlidingMenu.TOUCHMODE_MARGIN 边框滑动Sli
Android SlideMenu
第三方组件 SlideMenu 实现步骤与主要方法: 1、构建SlidingMenu menu=new SlidingMenu(context) 2、设置模式为左侧边栏  menu.setMode(SlidingMenu.LEFT); 3、设置菜单 View menuView=LayoutInflater.from(this).inflate(news_silding_menu, null
slidemenu源码
左右滑动菜单slidemenu开源代码,
侧滑菜单 - SlideMenu
Android 侧滑菜单 - SlideMenu
开源项目SlideMenu使用详解
以前搞过一个滑动菜单,是自己重写发view,实现了基本功能可以滑动显示,后来看了下SlideMenu的使用,真是非常强大,不但可是简单的设置实现两侧滑动菜单,还可以设置菜单的阴影、渐变色、划动模式等,所以还是老实点直接用现成的吧,当然有时间的话还要看先SlideMenu的源码。这里先详细分析下SlideMenu的使用: 准备工作: 1. SlidingMenu 下载地址: https://
安卓SlideMenu
安卓SlideMenu 仿QQ 主页侧滑菜单
集成Android SlidingMenu(SlideMenu)
 左右效果图如下: 左边 右边 Android SlidingMenu(SlideMenu)是一个开源项目框架。在git上的下载地址:https://github.com/jfeinstein10/SlidingMenu 现在基于Fragment给出一个简单的左边+右边的SlidingMenu(SlideMenu) 。首先要引入第三方库,这不比多说,现到git
slidemenu版
使用layout版的slidemenu
侧滑栏: SlideMenu
转自:Android SlidingMenu 使用详解   1、在Activity中通过SlidingMenu构造方法,直接设置侧滑菜单 [java] view plain copy package com.zhy.zhy_slidemenu_demo;    import android.app.Activity;  import android
滑动侧边栏SlideMenu
android滑动侧边栏SlideMenu。采用继承ViewGroup实现。