本篇博客给大家分享一个效果比较好的侧滑菜单的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. sql 随机数

    select FLOOR(rand()*16) 就是随机得到0到15之间的一个整数 select CEILING(rand()*15) 就是随机得到1到15之间的一个整数 FLOOR()为地板函数,取 ...

  2. Xcode5 配置 github

    首先,要在github上,进行如下的操作: 1. github 官网 https://github.com  注册github账号. 2. 创建一个repository,命名为项目的名称,如 Gith ...

  3. Dubbo使用详解及环境搭建

    一:Dubbo简介 Dubbo是阿里巴巴提供的开源的SOA(面向服务的体系结构)服务化治理的技术框架,据说只是一部分开源的,但一些基本的需求已经可以满足的,而且可扩展性.是一种能取代PHRPC的服务调 ...

  4. section 模块页面切换代码

    <div class="blockcode"><blockquote><!DOCTYPE html><html><head&g ...

  5. rotate.js实现图片旋转 (chrome,IE,firefox都可以实现)

    找了好多资料,要么是IE可以用,但是谷歌不行,,还有就是两个都可以用的,图片大小显示不全.终于找到一个好一点的js,先贴一下代码. 1.rotate.js jQuery.fn.rotate = fun ...

  6. Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to “*****”

    Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment ...

  7. php 格式

    $abc = ($_POST[' : strtotime($_POST['start_time']); 解析:判断接收的数据是否为0,如果等于0赋值0,若不等于,则赋值获取的数值. strtotime ...

  8. bzoj 2648 SJY摆棋子 kd树

    题目链接 初始的时候有一些棋子, 然后给两种操作, 一种是往上面放棋子. 另一种是给出一个棋子的位置, 问你离它最近的棋子的曼哈顿距离是多少. 写了指针版本的kd树, 感觉这个版本很好理解. #inc ...

  9. lda模型的python实现

    LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,最近看了点资料,准备使用python实现一下.至于数学模型相关知识,某度一大堆,这里也给出之前参考过的一个挺详细 ...

  10. 在Azure Cloud Service中部署Java Web App(1)

    Microsoft Azure是一个开放的,灵活的云平台,除了对自家的.Net平台有良好的支持外,对于各种开源的软件,语言,工具,框架都有着良好的支持,比如Java,Php,Python等等,你可以使 ...