首页 > 代码库 > SlidingMenu开源项目滑动界面的实现总结
SlidingMenu开源项目滑动界面的实现总结
先上图
需要准备的是先得在GitHub上下载ActionBarSherlock-master.zip,和SlidingMenu-master.zip这两个开源文件,然后解压这两个包,SlidingMenu里面的library文件导入到Eclipse的一个工程里面(在这里不强调利Import一个android工程),还有ActionBarSherlock里面的actionbarsherlock文件导入到Eclipse当中。
导入之后就需要把library设置为一个library方便以后再其他工程里面调用,具体操作如下:
1.选中刚才导入的library工程,Alt+Enter
点击选中android,然后Add前面的actionbarsherlock文件(切记actionbarsherlock文件的路径不要是中文名,并且要跟library还有平时需要新建工程的地址在同一个工作区——Workspace),然后勾选上面的islibrary;这一步的目的是让我们的library(SlidingMenu刚才导入的项目)关联actionbarsherlock项目,因为它用到了actionbarsherlock里面的一些东西
2.如果做完第一步之后有的同学会发现可能会报错,这是因为library下的libs文件里面的包android-support-v4.jar跟actionbarsherlock存在差异,当然由于library引用actionbarsherlock里面的内容,所以我们可以删除library下libs里面的android-support-v4.jar,就可以
3.接下来就是修改library里面的SlidingFragmentActivity.java让它继承SherlockFragmentActivity。
4.做完上面的下来就是自己新建项目来实践证明一下。我最开始用的是SlidingMenu里面的example导入之后,运行完美,毫无破绽,然后就想自己新建个试试,结果遇到了很多麻烦
首先就是需要把自己新建项目里面的libs下的那个jar包删除,有一部分同学是好的,但是我运气不好,一直是R.java文件找不到,看底下报错信息,都是在actionbarsherlock里面缺省一些信息,
后来找了半天发现我需要修改新建项目里面的AndroidMainfest.xml文件里面的theme,改成 android:theme="@style/Theme.Sherlock" > 再此我得感谢那个叫“心尘”的同学帮了我。
不过还是有问题,R文件依然找不到,原因这次就和明了了,是因为我使用的额Eclipse版本可能过高,它里面新建工程的时候自身会依赖另外一个包,这也就是我每次新建一个工程自动多出来一个包的原因;然后锁依赖的这个包里面有很多东西和library是冲突的,有的重复定义过了,所以我果断删除这个包,然后继续看哪里报错,找到报错的地方继续删除,删除之后再把Mainactivity继承的类改为最原始的Activity,会好,如果发现有menu相关的,继续删除即可
接下来就总结下SlidingMenu的一些属性
SlidingMenu 常用属性介绍:
menu.setMode(SlidingMenu.LEFT);//设置左滑菜单
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可以滑动
menu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
menu.setBehindWidth(400);//设置SlidingMenu菜单的宽度
menu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上
menu.setMenu(R.layout.menu_layout);//设置menu的布局文件
menu.toggle();//动态判断自动关闭或开启SlidingMenu
menu.showMenu();//显示SlidingMenu
menu.showContent();//显示内容
menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开
关于关闭menu有两个监听,简单的来说,对于menu close事件,一个是when,一个是after
menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭时事件
menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭后事件
左右都可以划出SlidingMenu菜单只需要设置
menu.setMode(SlidingMenu.LEFT_RIGHT);属性,然后设置右侧菜单的布局文件
menu.setSecondaryShadowDrawable(R.drawable.shadowright);//右侧菜单的阴影图片
设置SlidingMenu属性
sm = getSlidingMenu();
//如果只显示左侧菜单就是用LEFT,右侧就RIGHT,左右都支持就LEFT_RIGHT
sm.setMode(SlidingMenu.LEFT_RIGHT);//设置菜单滑动模式,菜单是出现在左侧还是右侧,还是左右两侧都有
sm.setShadowDrawable(R.drawable.shadow);//设置阴影的图片资源
sm.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
//sm.setBehindWidth(200);//设置菜单的宽
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的区域
支持右侧划出菜单:
//SlidingMenu可以同时支持划出左右两侧的菜单,互不冲突,而且动画优美,体验良好。
sm.setSecondaryMenu(R.layout.menu_frame2);//设置右侧菜单
sm.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源
//右侧SlidingMenu的Fragment
getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame2, new SampleListFragment()).commit();
slidingMenu = getSlidingMenu();
//设置是左滑还是右滑,还是左右都可以滑
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
//设置阴影宽度
slidingMenu.setShadowWidth(getWindowManager().getDefaultDisplay().getWidth() / 40);
//设置左菜单阴影图片
slidingMenu.setShadowDrawable(R.drawable.shadow);
//设置右菜单阴影图片
slidingMenu.setSecondaryShadowDrawable(R.drawable.right_shadow);
//设置菜单占屏幕的比例
slidingMenu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5);
//设置滑动时菜单的是否淡入淡出
slidingMenu.setFadeEnabled(true);
//设置淡入淡出的比例
slidingMenu.setFadeDegree(0.4f);
//设置滑动时拖拽效果
slidingMenu.setBehindScrollScale(0);
//设置要使菜单滑动,触碰屏幕的范围
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
附上自己简单写的一段
SlidingMenu menu = new SlidingMenu(this); menu.setMode(SlidingMenu.LEFT); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); menu.setFadeDegree(0.35f); menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); menu.setMenu(R.layout.left_drawer_fragment); menu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() { @Override public void onOpened() { // TODO Auto-generated method stub } }); init(); }
public void init() { // LayoutInflater inflater = LayoutInflater.from(); // setVisible(R.layout.left_drawer_fragment); mLinearLayout = (LinearLayout)findViewById(R.id.textLayout); mTextView1 = (TextView) findViewById(R.id.textview1); mTextView2 = (TextView) findViewById(R.id.textview2); mTextView3 = (TextView) findViewById(R.id.textview3); mTextView4 = (TextView) findViewById(R.id.textview4); mTextView5 = (TextView) findViewById(R.id.textview5); mTextView6 = (TextView) findViewById(R.id.textview6); mTextView1.setOnClickListener(this); mTextView2.setOnClickListener(this); mTextView3.setOnClickListener(this); mTextView4.setOnClickListener(this); mTextView5.setOnClickListener(this); mTextView6.setOnClickListener(this); } @Override public void onClick(View view) { // TODO Auto-generated method stub switch (view.getId()) { case R.id.textview1: mLayout.setBackgroundColor(Color.BLUE); break; case R.id.textview2: mLayout.setBackgroundColor(Color.GREEN); break; case R.id.textview3: case R.id.textview4: case R.id.textview5: case R.id.textview6: mLayout.setBackgroundColor(Color.WHITE); break; } }
唯一用到的图片随便找一个代替即可