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 详 ...
随机推荐
- hdu 4282 A very hard mathematic problem
由于k的范围是0-2^31,而且x,y,z都是正整数,由题易知道2<=z<31,1<=x<y;所以直接枚举就好了!!! #include<iostream> #in ...
- 学习selenium需要具备的知识或技术
因为有QTP和JAVA的基础,selenium学起来会快很多,总结下学习selenium所需要具备的知识或技术 1.selenium进行的自动化测试是基于ui层面的,所以html,css,javasc ...
- 深入浅出Java并发包—锁机制(三)
接上文<深入浅出Java并发包—锁机制(二)> 由锁衍生的下一个对象是条件变量,这个对象的存在很大程度上是为了解决Object.wait/notify/notifyAll难以使用的问题. ...
- 日志工具logback的简介与配置
Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access.logback-c ...
- TCL语言笔记:TCL中的数组
一.介绍 Tcl 中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念.数组的存取速度要比列表有优势,数组在内部使用散列表来存储 ...
- ISO9000与ISO9001的区别
很多人询问ISO9000和ISO9001的区别在哪里,其实这是一个概念上的误解. ISO9001是ISO9000族标准所包括的一组质量管理体系核心标准之一.ISO9000族标准是国际标准化组织(ISO ...
- JavaScript中样式,方法 函数的应用
JavaScript中一个字母都不能错,编写的时候他不报错,也不提示,只有在执行的时候才会提示错误位置 . 一.样式 .waring {background-color:yellow } .highl ...
- [iOS]修改开发者中心Bundle Identifier的一些配置
登录开发者中心https://developer.apple.com 然后找到你的Bundle Identifier. 这里暂时只讲开启推送的功能,如果需要别的直接勾选前面的选择框 然后拉到最下面点击 ...
- JAVA+ Proxool+ SQLserver 2008 “signer information does not match signer information of other classes in the same package”
1. Proxool+SQLserver2008(sqljdbc4.jar)集成问题最近在项目中遇到个问题:我用的是Proxool连接池,连接SQLserver2008数据库,控制台报错:签名信息和同 ...
- JCIFS读取远程服务器文件过慢的解决方法
JCIFS读取远程服务器文件过慢的解决方法 发表于3年前(2013-07-12 11:23) 阅读(1174) | 评论(0) // 我要收藏"; var favor_del = &qu ...