通过这篇文章您将学习到如下图中的UI效果(开发环境:AndroidStudio 2.2):

Android侧滑弹出界面并向右推动 侧滑打开应用_Android侧滑弹出界面并向右推动

额额,这个动态图有点魔性
简单说一下效果就是使用 SlidingMenu 做了一个侧滑菜单
打开(关闭)的方式有两种,一种是向右(左)滑动打开(关闭),一种是点击按钮打开(关闭)


首先,我们需要到 GitHub 下载 SlidingMenu 所用到的 library,下载地址

解压后我们会得到:

Android侧滑弹出界面并向右推动 侧滑打开应用_Android侧滑弹出界面并向右推动_02


这里我们只需要使用 library 文件夹

然后,我们需要将下载好的 library 导入到项目中
在导入时我们要注意按如下步骤操作:
File —> New —> Import Module —> 选择 library 文件夹 —> Finish
等待编译器编译完成,若出现错误提示,请参考 SlidingMenu导入问题
然后我们将library添加到项目中,注意按如下步骤操作:
按 Ctrl + Shift + Alt + S —> app —> Dependencies —> + —> Module dependency —> 选中library —> OK

然后,我们就可以开始编写代码了:
先理一下思路:
1. 创建SlidingMenu对象
2. 为SlidingMneu对象设置属性
3. 为SlidingMneu对象添加监听事件
4. 增加一个按钮为其添加打开(关闭)菜单的监听事件

首先,创建 SlidingMneu 对象,使用 new 来创建的

private SlidingMenu menu;
menu = new SlidingMenu(MainActivity.this);//创建SlidingMenu对象

然后,为 Slidingmenu 添加各种属性,包括:侧滑栏的位置、触摸屏幕的模式、根据资源文件ID来设置滑动菜单的阴影效果、滑动菜单式图的宽度、渐入渐出效果的值、为滑动菜单设置布局

//设置侧滑栏的位置
menu.setMode(SlidingMenu.LEFT);

//设置触摸屏幕的模式       menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 
menu.setShadowWidthRes(R.dimen.shadow_width);

//根据资源文件ID来设置滑动菜单的阴影效果
menu.setShadowDrawable(R.drawable.shadow);

//设置滑动菜单式图的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);

//设置渐入渐出效果的值
menu.setFadeDegree(0.35f);

//把滑动菜单添加进所有的Activity中
menu.attachToActivity(MainActivity.this, SlidingMenu.SLIDING_CONTENT);

//为滑动菜单设置布局
menu.setMenu(R.layout.leftmenu);

leftmenu 布局就是菜单的布局,这里我们只添加了一个 TextView

然后,我们为SlidingMneu对象添加监听事件:

/**
* 打开的监听事件
*/
menu.setOnOpenListener(new SlidingMenu.OnOpenListener() {
     @Override
     public void onOpen() {
          mMenuBtn.setText("关闭");
         mMenuBtn.setBackgroundColor(Color.YELLOW);
         Toast.makeText(MainActivity.this, "打开了!", Toast.LENGTH_SHORT).show();
     }
});

/**
*关闭的监听事件 
*/
menu.setOnCloseListener(new SlidingMenu.OnCloseListener() {
     @Override
     public void onClose() {
          mMenuBtn.setText("打开");
          mMenuBtn.setBackgroundColor(Color.GREEN);
          Toast.makeText(MainActivity.this, "关上了!", Toast.LENGTH_SHORT).show();
     }
});

然后我们再添加一个按钮,为按钮添加监听事件:

mMenuBtn.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
            menu.toggle();
       }
});

没错,只需要一个方法 toggle(),在菜单关闭时执行该方法菜单会打开,反之亦然。

好了,这样我们上文中的案例效果就实现了!赶紧运用到自己的项目去吧!
完整代码:

package win.yuanhongbao.slidingmenudemo;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;

public class MainActivity extends AppCompatActivity {

    private SlidingMenu menu;
    private Button mMenuBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMenuBtn = (Button) findViewById(R.id.btn_menu);
        mMenuBtn.setText("打开");
        mMenuBtn.setBackgroundColor(Color.GREEN);

        //创建SlidingMenu对象
        menu = new SlidingMenu(MainActivity.this);

        //设置侧滑栏的位置
        menu.setMode(SlidingMenu.LEFT);
        //设置触摸屏幕的模式
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        menu.setShadowWidthRes(R.dimen.shadow_width);
        //根据资源文件ID来设置滑动菜单的阴影效果
        menu.setShadowDrawable(R.drawable.shadow);
        //设置滑动菜单式图的宽度
        menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        //设置渐入渐出效果的值
        menu.setFadeDegree(0.35f);
        //把滑动菜单添加进所有的Activity中
        menu.attachToActivity(MainActivity.this, SlidingMenu.SLIDING_CONTENT);
        //为滑动菜单设置布局
        menu.setMenu(R.layout.leftmenu);

        /**
         *打开的监听事件
         */
        menu.setOnOpenListener(new SlidingMenu.OnOpenListener() {
            @Override
            public void onOpen() {
                mMenuBtn.setText("关闭");
                mMenuBtn.setBackgroundColor(Color.YELLOW);
                Toast.makeText(MainActivity.this, "打开了!", Toast.LENGTH_SHORT).show();
            }
        });
         /**
         *关闭的监听事件
         */
        menu.setOnCloseListener(new SlidingMenu.OnCloseListener() {
            @Override
            public void onClose() {
                mMenuBtn.setText("打开");
                mMenuBtn.setBackgroundColor(Color.GREEN);
                Toast.makeText(MainActivity.this, "关上了!", Toast.LENGTH_SHORT).show();
            }
        });
        /**
         *按钮的监听事件
         */
        mMenuBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                menu.toggle();
            }
        });
    }


}