本篇博客给大家分享一个效果比较好的侧滑菜单的Demo,实现点击左边菜单切换Fragment。

效果如下:

主Activity代码:

  1. package com.infzm.slidingmenu.demo;
  2. import android.os.Bundle;
  3. import android.support.v4.app.Fragment;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.view.Window;
  7. import android.widget.ImageView;
  8. import android.widget.TextView;
  9. import com.infzm.slidingmenu.demo.fragment.LeftFragment;
  10. import com.infzm.slidingmenu.demo.fragment.TodayFragment;
  11. import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
  12. import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
  13. /**
  14. * @date 2014/11/14
  15. * @author wuwenjie
  16. * @description 主界面
  17. */
  18. public class MainActivity extends SlidingFragmentActivity implements
  19. OnClickListener {
  20. private ImageView topButton;
  21. private Fragment mContent;
  22. private TextView topTextView;
  23. @Override
  24. public void onCreate(Bundle savedInstanceState) {
  25. requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_main);
  28. initSlidingMenu(savedInstanceState);
  29. topButton = (ImageView) findViewById(R.id.topButton);
  30. topButton.setOnClickListener(this);
  31. topTextView = (TextView) findViewById(R.id.topTv);
  32. }
  33. /**
  34. * 初始化侧边栏
  35. */
  36. private void initSlidingMenu(Bundle savedInstanceState) {
  37. // 如果保存的状态不为空则得到之前保存的Fragment,否则实例化MyFragment
  38. if (savedInstanceState != null) {
  39. mContent = getSupportFragmentManager().getFragment(
  40. savedInstanceState, "mContent");
  41. }
  42. if (mContent == null) {
  43. mContent = new TodayFragment();
  44. }
  45. // 设置左侧滑动菜单
  46. setBehindContentView(R.layout.menu_frame_left);
  47. getSupportFragmentManager().beginTransaction()
  48. .replace(R.id.menu_frame, new LeftFragment()).commit();
  49. // 实例化滑动菜单对象
  50. SlidingMenu sm = getSlidingMenu();
  51. // 设置可以左右滑动的菜单
  52. sm.setMode(SlidingMenu.LEFT);
  53. // 设置滑动阴影的宽度
  54. sm.setShadowWidthRes(R.dimen.shadow_width);
  55. // 设置滑动菜单阴影的图像资源
  56. sm.setShadowDrawable(null);
  57. // 设置滑动菜单视图的宽度
  58. sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
  59. // 设置渐入渐出效果的值
  60. sm.setFadeDegree(0.35f);
  61. // 设置触摸屏幕的模式,这里设置为全屏
  62. sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
  63. // 设置下方视图的在滚动时的缩放比例
  64. sm.setBehindScrollScale(0.0f);
  65. }
  66. @Override
  67. protected void onSaveInstanceState(Bundle outState) {
  68. super.onSaveInstanceState(outState);
  69. getSupportFragmentManager().putFragment(outState, "mContent", mContent);
  70. }
  71. /**
  72. * 切换Fragment
  73. *
  74. * @param fragment
  75. */
  76. public void switchConent(Fragment fragment, String title) {
  77. mContent = fragment;
  78. getSupportFragmentManager().beginTransaction()
  79. .replace(R.id.content_frame, fragment).commit();
  80. getSlidingMenu().showContent();
  81. topTextView.setText(title);
  82. }
  83. @Override
  84. public void onClick(View v) {
  85. switch (v.getId()) {
  86. case R.id.topButton:
  87. toggle();
  88. break;
  89. default:
  90. break;
  91. }
  92. }
  93. }
package com.infzm.slidingmenu.demo;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView; import com.infzm.slidingmenu.demo.fragment.LeftFragment;
import com.infzm.slidingmenu.demo.fragment.TodayFragment;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; /**
* @date 2014/11/14
* @author wuwenjie
* @description 主界面
*/
public class MainActivity extends SlidingFragmentActivity implements
OnClickListener { private ImageView topButton;
private Fragment mContent;
private TextView topTextView; @Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initSlidingMenu(savedInstanceState); topButton = (ImageView) findViewById(R.id.topButton);
topButton.setOnClickListener(this);
topTextView = (TextView) findViewById(R.id.topTv);
} /**
* 初始化侧边栏
*/
private void initSlidingMenu(Bundle savedInstanceState) {
// 如果保存的状态不为空则得到之前保存的Fragment,否则实例化MyFragment
if (savedInstanceState != null) {
mContent = getSupportFragmentManager().getFragment(
savedInstanceState, "mContent");
} if (mContent == null) {
mContent = new TodayFragment();
} // 设置左侧滑动菜单
setBehindContentView(R.layout.menu_frame_left);
getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame, new LeftFragment()).commit(); // 实例化滑动菜单对象
SlidingMenu sm = getSlidingMenu();
// 设置可以左右滑动的菜单
sm.setMode(SlidingMenu.LEFT);
// 设置滑动阴影的宽度
sm.setShadowWidthRes(R.dimen.shadow_width);
// 设置滑动菜单阴影的图像资源
sm.setShadowDrawable(null);
// 设置滑动菜单视图的宽度
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置渐入渐出效果的值
sm.setFadeDegree(0.35f);
// 设置触摸屏幕的模式,这里设置为全屏
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置下方视图的在滚动时的缩放比例
sm.setBehindScrollScale(0.0f); } @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, "mContent", mContent);
} /**
* 切换Fragment
*
* @param fragment
*/
public void switchConent(Fragment fragment, String title) {
mContent = fragment;
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, fragment).commit();
getSlidingMenu().showContent();
topTextView.setText(title);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.topButton:
toggle();
break;
default:
break;
}
} }

侧边栏菜单Fragment

  1. package com.infzm.slidingmenu.demo.fragment;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.support.v4.app.Fragment;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.view.ViewGroup;
  9. import com.infzm.slidingmenu.demo.MainActivity;
  10. import com.infzm.slidingmenu.demo.R;
  11. /**
  12. * @date 2014/11/14
  13. * @author wuwenjie
  14. * @description 侧边栏菜单
  15. */
  16. public class LeftFragment extends Fragment implements OnClickListener{
  17. private View todayView;
  18. private View lastListView;
  19. private View discussView;
  20. private View favoritesView;
  21. private View commentsView;
  22. private View settingsView;
  23. @Override
  24. public void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. }
  27. @Override
  28. public void onAttach(Activity activity) {
  29. super.onAttach(activity);
  30. }
  31. @Override
  32. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  33. Bundle savedInstanceState) {
  34. View view = inflater.inflate(R.layout.layout_menu, null);
  35. findViews(view);
  36. return view;
  37. }
  38. public void findViews(View view) {
  39. todayView = view.findViewById(R.id.tvToday);
  40. lastListView = view.findViewById(R.id.tvLastlist);
  41. discussView = view.findViewById(R.id.tvDiscussMeeting);
  42. favoritesView = view.findViewById(R.id.tvMyFavorites);
  43. commentsView = view.findViewById(R.id.tvMyComments);
  44. settingsView = view.findViewById(R.id.tvMySettings);
  45. todayView.setOnClickListener(this);
  46. lastListView.setOnClickListener(this);
  47. discussView.setOnClickListener(this);
  48. favoritesView.setOnClickListener(this);
  49. commentsView.setOnClickListener(this);
  50. settingsView.setOnClickListener(this);
  51. }
  52. @Override
  53. public void onDestroyView() {
  54. super.onDestroyView();
  55. }
  56. @Override
  57. public void onDestroy() {
  58. super.onDestroy();
  59. }
  60. @Override
  61. public void onClick(View v) {
  62. Fragment newContent = null;
  63. String title = null;
  64. switch (v.getId()) {
  65. case R.id.tvToday: // 今日
  66. newContent = new TodayFragment();
  67. title = getString(R.string.today);
  68. break;
  69. case R.id.tvLastlist:// 往期列表
  70. newContent = new LastListFragment();
  71. title = getString(R.string.lastList);
  72. break;
  73. case R.id.tvDiscussMeeting: // 讨论集会
  74. newContent = new DiscussFragment();
  75. title = getString(R.string.discussMeetting);
  76. break;
  77. case R.id.tvMyFavorites: // 我的收藏
  78. newContent = new MyFavoritesFragment();
  79. title = getString(R.string.myFavorities);
  80. break;
  81. case R.id.tvMyComments: // 我的评论
  82. newContent = new MyCommentsFragment();
  83. title = getString(R.string.myComments);
  84. break;
  85. case R.id.tvMySettings: // 设置
  86. newContent = new MySettingsFragment();
  87. title = getString(R.string.settings);
  88. break;
  89. default:
  90. break;
  91. }
  92. if (newContent != null) {
  93. switchFragment(newContent, title);
  94. }
  95. }
  96. /**
  97. * 切换fragment
  98. * @param fragment
  99. */
  100. private void switchFragment(Fragment fragment, String title) {
  101. if (getActivity() == null) {
  102. return;
  103. }
  104. if (getActivity() instanceof MainActivity) {
  105. MainActivity fca = (MainActivity) getActivity();
  106. fca.switchConent(fragment, title);
  107. }
  108. }
  109. }
package com.infzm.slidingmenu.demo.fragment;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup; import com.infzm.slidingmenu.demo.MainActivity;
import com.infzm.slidingmenu.demo.R;
/**
* @date 2014/11/14
* @author wuwenjie
* @description 侧边栏菜单
*/
public class LeftFragment extends Fragment implements OnClickListener{
private View todayView;
private View lastListView;
private View discussView;
private View favoritesView;
private View commentsView;
private View settingsView; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
} @Override
public void onAttach(Activity activity) {
super.onAttach(activity);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_menu, null);
findViews(view); return view;
} public void findViews(View view) {
todayView = view.findViewById(R.id.tvToday);
lastListView = view.findViewById(R.id.tvLastlist);
discussView = view.findViewById(R.id.tvDiscussMeeting);
favoritesView = view.findViewById(R.id.tvMyFavorites);
commentsView = view.findViewById(R.id.tvMyComments);
settingsView = view.findViewById(R.id.tvMySettings); todayView.setOnClickListener(this);
lastListView.setOnClickListener(this);
discussView.setOnClickListener(this);
favoritesView.setOnClickListener(this);
commentsView.setOnClickListener(this);
settingsView.setOnClickListener(this);
} @Override
public void onDestroyView() {
super.onDestroyView();
} @Override
public void onDestroy() {
super.onDestroy();
} @Override
public void onClick(View v) {
Fragment newContent = null;
String title = null;
switch (v.getId()) {
case R.id.tvToday: // 今日
newContent = new TodayFragment();
title = getString(R.string.today);
break;
case R.id.tvLastlist:// 往期列表
newContent = new LastListFragment();
title = getString(R.string.lastList);
break;
case R.id.tvDiscussMeeting: // 讨论集会
newContent = new DiscussFragment();
title = getString(R.string.discussMeetting);
break;
case R.id.tvMyFavorites: // 我的收藏
newContent = new MyFavoritesFragment();
title = getString(R.string.myFavorities);
break;
case R.id.tvMyComments: // 我的评论
newContent = new MyCommentsFragment();
title = getString(R.string.myComments);
break;
case R.id.tvMySettings: // 设置
newContent = new MySettingsFragment();
title = getString(R.string.settings);
break;
default:
break;
}
if (newContent != null) {
switchFragment(newContent, title);
}
} /**
* 切换fragment
* @param fragment
*/
private void switchFragment(Fragment fragment, String title) {
if (getActivity() == null) {
return;
}
if (getActivity() instanceof MainActivity) {
MainActivity fca = (MainActivity) getActivity();
fca.switchConent(fragment, title);
}
} }

上面是核心代码,引入SlidingMenu开源库。

Demo下载地址:http://download.csdn.net/download/wwj_748/8184889

转 android 侧滑实现的更多相关文章

  1. Android侧滑菜单代码实现

    前两天学习了hyman老师讲的Android侧滑菜单的实现,经过自己的整理分享出来给大家学习一下 现在很多APP都有菜单侧滑的功能,本篇文章主要讲解使用自定义的HorizontalScrollView ...

  2. Android 侧滑菜单的简单实现(SlidingMenu)二

    在上一篇博文中已经简单的实现了侧滑菜单,代码也很简单,就几行代码. 这篇文章依然讲侧滑菜单,与前一篇文章不同的是,这篇文章用不同的代码方式来实现侧滑菜单. 在前面的文章中已经用了在Activity中通 ...

  3. Android 侧滑菜单的简单实现(SlidingMenu)

    在我还没有学习Android的时候就用过侧滑菜单的APP,当时第一个感觉是:哇塞,这效果不错!当然,现在自己都已经学Android了,这效果当然也要做出来啊~ SlidingMenu是一种比较新的设置 ...

  4. android侧滑菜单笔记

    一.SlidingPaneLayout v4包下的控件,使用简单,功能简洁.官方文档明确说明该控件只能左侧滑动.使用如下: <android.support.v4.widget.SlidingP ...

  5. android侧滑删除,模仿qq跟进item显示删除按钮

    今天所写的代码只是为了个人以后查询方便,如果你参考了并且在使用中遇到问题也可以在这里直接回复我 SwipeDelMenuLayout: 效果图: item布局: <?xml version=&q ...

  6. 教你用DrawLayout 实现Android 侧滑菜单

    现在的APP越来越注重用户体验,百度视频客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示.类似的还有天天动听,人 ...

  7. android侧滑效果,SlidingMenu配置

    最近开始做点东西,需要用到android activity侧滑的效果.感觉配置起来还是有点小麻烦,总结一下以便回顾. 需要的东西: 1.SlidingMenu项目:点击打开链接 2.ActionBar ...

  8. android 侧滑菜单

    就是用手一滑才出现,占手机半个多屏幕的菜单.为了美观和页面转跳,很多时候要用到. 实现的话就是使用官方的DrawerLayout,注意这个布局一定要是最顶层的布局. 在DrawerLayout里面直接 ...

  9. android侧滑效果(引用官方网站提供的API文件)

    原文地址:http://www.cnblogs.com/android100/p/android-SlidingMenu.html 在新浪微博和唱吧里面都有看到android的侧滑效果,于是想要学习一 ...

随机推荐

  1. U盘变小恢复工具——亲测完美可用

    大白菜U盘,装系统后,U盘损坏,格盘后8G只剩345M,用usbboot恢复到了2G容量.离8G还差很远.用U盘变小恢复工具后,完美恢复到原来大小.在此记录一下,以待下次遇到相似情况使用. 原文地址 ...

  2. Android开发_关于如何屏蔽Home键

    今天在遇到一个要屏蔽Home键的问题,研究一上午终于解决,方法记录于下: 在Android2.3版本以下重写以下方法就能屏蔽Home键: public void onAttachedToWindow( ...

  3. Sql Server 2012启动存储过程

    可以通过如下步骤创建 1.打开show advanced options reconfigure 2.打开scan for startup procs,使得sql server在启动时扫描需要运行的p ...

  4. 【Android类型SDK测试(一)】认识Android类型的 SDK

    (一)SDK是个什么东东 接触软件相关行业的同学都应该知道,SDK(即 Software Development Kit),软件开发包.其作用就是为开发某些软件提供一些便利的东西,包括工具 集合,文档 ...

  5. oracle recyclebin详解(闪回删除的表)

    今天在SOA应用数据库上运用DBMS_REDEFITION包进行在线非分区表转换分区表操作时,本想DROP掉建的临时表cube_scope_temp不小心后面忘记加"temp"直接 ...

  6. SQLServer 2012 可视化窗口中,设置“时间”默认值为“当前时间"

    最近,需要在SQLServer 2012中,设置datetime的默认值为当前时间. 通过可视化窗口进行设置,而不是将getdate()函数写在sql语句中,也不是将‘2022-2-2 22:22:2 ...

  7. jquery 鼠标右键事件、左键单击事件判定

    $(function(){ $('a').mousedown(function(e){ alert(e.which) // 1 = 鼠标左键 left; 2 = 鼠标中键; 3 = 鼠标右键 retu ...

  8. 1003 Crashing Balloon

    考察DFS的应用,判断两个数的因子. #include <stdio.h> int f1,f2; void DFS(int m,int n,int k){ ){ f2=; ) f1=; } ...

  9. python连接redis002

    例子001. 通过StrictRedis模式连接到redis.并调用get命令读取了一个string类型的值. #!/usr/bin/python #!coding:utf-8 import redi ...

  10. VS2010中添加dll目录

    RT,比如用VS写QT,用qmake生成的项目,需要在项目属性里设置:调试->环境,path=%path%;C:\Qt\4.8.5\bin 这样省的每次都要把一堆dll复制到debug/rele ...