SlidingMenu的使用
下载地址:
https://github.com/jfeinstein10/SlidingMenu
2.导入库
3.关联库
4.MainActivity继承SlidingFragmentActivity把,onCreate修饰改成public
private void initSlidingMenu()
{
//1.设置主页面
setContentView(R.layout.activity_main);
//2.设置左侧菜单
setBehindContentView(R.layout.activity_leftmenu);
//3.设置右侧菜单
SlidingMenu slidingMenu = getSlidingMenu();
// slidingMenu.setSecondaryMenu(R.layout.activity_rightmenu);//设置右侧菜单
//4.设置显示的模式:左侧菜单+主页,左侧菜单+主页面+右侧菜单;主页面+右侧菜单
slidingMenu.setMode(SlidingMenu.LEFT);
//5.设置滑动模式:滑动边缘,全屏滑动,不可以滑动
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
DisplayMetrics outmetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outmetrics);
screeWidth = outmetrics.widthPixels;
screeHeight = outmetrics.heightPixels;
//6.设置主页占据的宽度
// slidingMenu.setBehindOffset(DensityUtil.dip2px(MainActivity.this, 200));
slidingMenu.setBehindOffset((int) (screeWidth * 0.625));
}
5.drawerLayout的简介
http://download.csdn.net/detail/lmj623565791/8202583
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.OnClosedListene(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);
UI框架图
imageMainActivity
布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fl_main_content"
android:background="@android:color/white"
tools:context="com.example.newsapp.activity.MainActivity">
</FrameLayout>
MainActivity具体代码
public class MainActivity extends SlidingFragmentActivity
{
private int screeWidth;
private int screeHeight;
public static final String MAIN_CONTENT_TAG = "main_content_tag";
public static final String LEFTMENU_TAG = "leftmenu_tag";
@Override
public void onCreate(Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);//设置没有标题
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initSlidingMenu();
//初始化Fragment
initFragment();
}
private void initFragment()
{
//1.得到FragmentManger
FragmentManager fm = getSupportFragmentManager();
//2.开启事务
FragmentTransaction ft= fm.beginTransaction();
//3.替换
ft.replace(R.id.fl_main_content,new ContentFragment(), MAIN_CONTENT_TAG);//主页
ft.replace(R.id.fl_leftmenu, new LeftmenuFragment(), LEFTMENU_TAG);//左侧菜单
//4.提交
ft.commit();
}
private void initSlidingMenu()
{
//1.设置主页面
setContentView(R.layout.activity_main);
//2.设置左侧菜单
setBehindContentView(R.layout.activity_leftmenu);
//3.设置右侧菜单
SlidingMenu slidingMenu = getSlidingMenu();
// slidingMenu.setSecondaryMenu(R.layout.activity_rightmenu);//设置右侧菜单
//4.设置显示的模式:左侧菜单+主页,左侧菜单+主页面+右侧菜单;主页面+右侧菜单
slidingMenu.setMode(SlidingMenu.LEFT);
//5.设置滑动模式:滑动边缘,全屏滑动,不可以滑动
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
DisplayMetrics outmetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outmetrics);
screeWidth = outmetrics.widthPixels;
screeHeight = outmetrics.heightPixels;
//6.设置主页占据的宽度
// slidingMenu.setBehindOffset(DensityUtil.dip2px(MainActivity.this, 200));
slidingMenu.setBehindOffset((int) (screeWidth * 0.625));
}
}
自定义不可以滑动的ViewPager
限制左滑菜单只能在新闻中心页面中侧滑。
public class NoScrollViewPager extends ViewPager
{
/**
* 通常在代码中实例化的时候用该方法
*
* @param context
*/
public NoScrollViewPager(Context context)
{
super(context);
}
/**
* 在布局文件中使用该类的时候,实例化该类用该构造方法,这个方法不能少,少的化会崩溃。
*
* @param context
* @param attrs
*/
public NoScrollViewPager(Context context, AttributeSet attrs)
{
super(context, attrs);
}
/**
* 重写触摸事件,消费掉
*
* @param ev
* @return
*/
@Override
public boolean onTouchEvent(MotionEvent ev)
{
return true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
return false;
}
}
在ContentFragment类的initView()方法中使用
viewpager = (NoScrollViewPager) view.findViewById(R.id.viewpager);
在RadioGroup的监听事件中监听切换的页面和限制侧滑菜单
/**
* @param group RadioGroup
* @param checkedId 被选中的RadioButton的id
*/
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
switch (checkedId)
{
case R.id.rb_home://主页radioButton的id
viewpager.setCurrentItem(0, false);
isEnableSlidingMenu(SlidingMenu.TOUCHMODE_NONE);
break;
case R.id.rb_newscenter://新闻中心radioButton的id
viewpager.setCurrentItem(1, false);
isEnableSlidingMenu(SlidingMenu.TOUCHMODE_FULLSCREEN);
break;
case R.id.rb_smartservice://智慧服务radioButton的id
viewpager.setCurrentItem(2, false);
isEnableSlidingMenu(SlidingMenu.TOUCHMODE_NONE);
break;
case R.id.rb_govaffair://政要指南的RadioButton的id
viewpager.setCurrentItem(3, false);
isEnableSlidingMenu(SlidingMenu.TOUCHMODE_NONE);
break;
case R.id.rb_setting://设置中心RadioButton的id
viewpager.setCurrentItem(4, false);
isEnableSlidingMenu(SlidingMenu.TOUCHMODE_NONE);
break;
}
}
/**
* 根据传人的参数设置是否让SlidingMenu可以滑动
*/
private void isEnableSlidingMenu(int touchmodeFullscreen)
{
MainActivity mainActivity = (MainActivity) context;
mainActivity.getSlidingMenu().setTouchModeAbove(touchmodeFullscreen);
}
屏蔽预加载
在ContentFragment中的适配器的方法中注释initData()方法的调用
网友评论