slidingmenu + fragment 左右菜单滑动
content_frame.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
左侧 menu_frame.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
右侧 menu_frame_right.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_frame_right"
android:layout_width="match_parent"
android:layout_height="match_parent" />
package com.cn.slidingmenu.fragment; import com.actionbarsherlock.view.MenuItem;
import com.cn.slidingmenu.fragment.R;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.CanvasTransformer;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; import android.graphics.Canvas;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.animation.Interpolator; /**
* slidingmenu + fragment
*
* @author dr
*/
public class MainActivity extends SlidingFragmentActivity { private SlidingMenu sm;
private Fragment contentFragment;
private Fragment leftFragment; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_frame); // 设置SlidingMenu的layout
setBehindContentView(R.layout.menu_frame); if (savedInstanceState == null) {
contentFragment = new Fragment1();
} else {
// 取出之前保存的contentFragment
contentFragment = this.getSupportFragmentManager().getFragment(
savedInstanceState, "contentFragment");
}
// 设置当前的fragment
// getSupportFragmentManager JAR包当中的
this.getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, contentFragment).commit(); /** 设置SlidingMenu属性和layout */
// 得到SlidingMenu的对象
sm = getSlidingMenu();
// 设置slidingmenu滑动的方式
sm.setMode(SlidingMenu.LEFT_RIGHT);
// 设置slidingmenu边界的阴影图片
sm.setShadowDrawable(R.drawable.shadow);
// 设置阴影的宽度
sm.setShadowWidthRes(R.dimen.shadow_width);
// 设置slidingmenu宽度
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 设置slidingmenu宽度
// sm.setBehindWidth(400);
// 设置滑出slidingmenu范围
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
sm.setMenu(R.layout.menu_frame);
// 设置slidingmenu动画
sm.setBehindCanvasTransformer(null); // 设置menu的fragment
leftFragment = new LeftFragment();
this.getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame, leftFragment).commit(); // 设置右侧的slidingmenu
sm.setSecondaryMenu(R.layout.menu_frame_right);
sm.setSecondaryShadowDrawable(R.drawable.shadowright); // 设置右侧滑出的slidingmenu
RightFragment rightFragment = new RightFragment();
this.getSupportFragmentManager().beginTransaction()
.replace(R.id.menu_frame_right, rightFragment).commit(); // 设置在slidingmenu页显示ActionBar
setSlidingActionBarEnabled(false);
// 是ActionBar的图标可以被点击
getSupportActionBar().setHomeButtonEnabled(true);
// 启用向左的图标
getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 动态打开或关闭slidingmenu
sm.toggle();
break;
default:
break;
}
return true;
} @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 1.bundle
// 2.存放的ID
// 3.当前要保存的fragment的实例
this.getSupportFragmentManager().putFragment(outState,
"contentFragment", contentFragment);
} /**
* 切换fragment
*
* @param f
*/
public void switchFragment(Fragment f) {
contentFragment = f;
this.getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, contentFragment).commit();
sm.toggle();
} /**
* 缩放动画
*/
private CanvasTransformer canvasTransformer = new CanvasTransformer() { @Override
public void transformCanvas(Canvas canvas, float percentOpen) {
float scale = (float) (percentOpen * 0.25 + 0.75);
canvas.scale(scale, scale, canvas.getWidth() / 2,
canvas.getHeight() / 2);
} };
private static Interpolator interp = new Interpolator() {
@Override
public float getInterpolation(float t) {
t -= 1.0f;
return t * t * t + 1.0f;
}
}; /**
* 从下网上动画
*/
private CanvasTransformer canvasTransformer2 = new CanvasTransformer() { @Override
public void transformCanvas(Canvas canvas, float percentOpen) {
canvas.translate(
0,
canvas.getHeight()
* (1 - interp.getInterpolation(percentOpen)));
} }; /**
* 拉伸动画
*/
private CanvasTransformer canvasTransformer3 = new CanvasTransformer() {
@Override
public void transformCanvas(Canvas canvas, float percentOpen) {
canvas.scale(percentOpen, 1, 0, 0); }
}; }
package com.cn.slidingmenu.fragment; import com.cn.slidingmenu.fragment.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; public class Fragment1 extends Fragment { @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//设置fragment的layout
View view = inflater.inflate(R.layout.text, null);
TextView tv = (TextView) view.findViewById(R.id.test);
tv.setText(Fragment1.class.getSimpleName());
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
} }
package com.cn.slidingmenu.fragment; import java.util.ArrayList;
import java.util.List;
import com.cn.slidingmenu.fragment.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class LeftFragment extends Fragment implements OnItemClickListener { private View rootView; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 设置fragment的layout
rootView = inflater.inflate(R.layout.activity_main, null);
return rootView;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ListView lv = (ListView) rootView.findViewById(R.id.listview); List<String> list = initData(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, android.R.id.text1, list); lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
} /**
* 初始化数据
* @return
*/
public List<String> initData() {
List<String> list = new ArrayList<String>();
list.add(Fragment1.class.getSimpleName());
list.add(Fragment2.class.getSimpleName());
list.add(Fragment3.class.getSimpleName());
list.add(Fragment4.class.getSimpleName());
list.add(Fragment5.class.getSimpleName());
return list;
} @Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Fragment f = null;
switch (position) {
case 0:
f = new Fragment1();
break;
case 1:
f = new Fragment2();
break;
case 2:
f = new Fragment3();
break;
case 3:
f = new Fragment4();
break;
case 4:
f = new Fragment5();
break;
default:
f = new Fragment1();
break;
}
switchFragment(f);
} /**
* listview item 点击时切换fragment
* @param f
*/
private void switchFragment(Fragment f) {
if (getActivity() instanceof MainActivity) {
MainActivity activity = (MainActivity) getActivity();
activity.switchFragment(f);
}
} }
package com.cn.slidingmenu.fragment; import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class RightFragment extends Fragment { private View rootView; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.activity_main, null);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ListView lv = (ListView) rootView.findViewById(R.id.listview);
List<String> list = initData();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(),
android.R.layout.simple_list_item_1,
android.R.id.text1,
list); lv.setAdapter(adapter);
} /**
* 初始化数据
* @return
*/
public List<String> initData() {
List<String> list = new ArrayList<String>();
list.add(Fragment1.class.getSimpleName());
list.add(Fragment2.class.getSimpleName());
list.add(Fragment3.class.getSimpleName());
list.add(Fragment4.class.getSimpleName());
list.add(Fragment5.class.getSimpleName());
return list;
} }
DEMO下载地址:http://pan.baidu.com/s/1o6v7iX0
文件中三个包, SlidingMenuFragment21引用library,library引用actionbarsherlock。
slidingmenu + fragment 左右菜单滑动的更多相关文章
- slidingmenu+fragment实现经常使用的側滑效果(包含Fragment状态的保存)
一.需求 关于fragment的问题,一直想写一篇博客了.应该当初自己也是对这玩意一点都不熟悉到如今也大概知道个日常的使用的地步. 一个側滑的导航栏,内有4个条目.每个选项点击进入相应的界面,每个界面 ...
- Android开源库--SlidingMenu左右侧滑菜单
如果说我比别人看得更远些,那是因为我站在了巨人的肩上. github地址:https://github.com/jfeinstein10/SlidingMenu 设置: 1.下载之后以依赖项的 ...
- 利用jquery实现百度新闻导航菜单滑动动画
前言 前两天,群里有人问百度新闻导航是如何实现的,当时由于忙于工作,没有来得及细看,恰好今天有空闲时间,索性就实现一下这个效果吧: 思路与步骤 1.利用UL创建简单横向导航: <!DOCTYPE ...
- SlidingMenu侧换菜单的导入
对于Adt-22.3有一种使用SlidingMenu(侧滑菜单的方式),直接加你放到lib文件夹下
- 【Web】利用jquery实现百度新闻导航菜单滑动动画
前言 前两天,群里有人问百度新闻导航是如何实现的,当时由于忙于工作,没有来得及细看,恰好今天有空闲时间,索性就实现一下这个效果吧: 思路与步骤 1.利用UL创建简单横向导航: <!DOCTYPE ...
- React-Native 之 GD (十九)TabBarItem 逻辑完善 / 关闭筛选菜单滑动手势 / Navigator 掉帧卡顿问题处理
1.TabBarItem 逻辑完善 那么为了更好的用户体验,我们这边还需要来处理一下点击 TabBarItem 的一下细节,那就是当用户点击 Item 时,可能只是单纯的想进行页面的 切换或者置顶操作 ...
- SlidingMenu和ActionBarSherlock结合滑动式菜单都
https://github.com/jfeinstein10/SlidingMenu http://actionbarsherlock.com/ SlidingMenu 的demo工程引用了Acti ...
- slidingMenu默认显示菜单
关键词:slidingmenu 默认 显示 打开 菜单 showMenu toggle 问题:要在Activity一打开就显示slidingmenu. 解决: 搜索“slidingmenu 默认打开” ...
- ViewPager 详解(五)-----使用Fragment实现ViewPager滑动
前言:前几篇文章讲解了ViewPager的普通实现方法,但Android官方最推荐的一种实现方法却是使用fragment,下面我们使用fragment来重新实现一下第一篇<ViewPager 详 ...
随机推荐
- 纯互联网项目“失宠”乐博资本杨宁称今后只投O2O
从去年开始,我们接下来会进入全新的时代,就是智能一切的时代!过去的互联网都在电脑里,都在服务器里,包括现在移动云也是,大数据都是在服务器里面,真正我们身边的东西,智能含量是非常低的.包括你家洗衣机.冰 ...
- lintcode: 中序遍历和后序遍历树构造二叉树
题目 中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 / \ 1 3 注意 你可 ...
- lintcode:Search Insert Position 搜索插入位置
题目: 搜索插入位置 给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引.如果没有,返回到它将会被按顺序插入的位置. 你可以假设在数组中无重复元素. 样例 [1,3,5,6],5 → 2 ...
- php规范
PSR-0 自动加载 PSR-1 基本代码规范 PSR-2 代码样式 PSR-3 日志接口
- Java学习笔记之:Java 接口
一.引言 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类 ...
- PCB走线角度选择 — PCB Layout 跳坑指南
现在但凡打开SoC原厂的PCB Layout Guide,都会提及到高速信号的走线的拐角角度问题,都会说高速信号不要以直角走线,要以45度角走线,并且会说走圆弧会比45度拐角更好.狮屎是不是这样?PC ...
- 多线程+委托的安全访问(invoke)
1.声明方法 2.声明委托类型 3.创建委托对象 4.启动线程 5.在线程调用的方法里通过Control的Invoke方法执行委托 public Form1() { InitializeCompone ...
- C++:虚函数的引入
5.4虚函数5.4.1 虚函数的引入 //例5.19 虚函数的引例 #include<iostream> using namespace std; class MyBase{ //声明基类 ...
- linux 进入包含空格文件名的文件夹
可以使用加英文的引号cd /usr/chen/java/"MyeClips\ 如果"\"在行末,是说明本行还未结束,下面一行和本行是一起的意思. 一般短格式的选项(一个 ...
- Android Handler传值方式
前面介绍handler的时候,也用到过几种传值方式,今天来总结一下,并且重点说一下bundle方式,代码如下: package com.handlerThread; import android.ap ...