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 详 ...
随机推荐
- java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)
死锁:是两个或者两个以上的线程被无限的阻塞,线程之间互相等待所需资源. 线程死锁产生的条件: 当两个线程相互调用Join()方法. 当两个线程使用嵌套的同步代码块的时候,一个线程占用了另一个线程的锁, ...
- jfinal想用到中大型项目中的项目经验分享
jfinal 用在大项目中更加方便实用,节省无数的开发时间,代码量相对 SSH 减少 75% 至 90%,对于项目结构来说,简单提以下几点: 1:先分大模块,大模块内部可以根据划分的model分成子包 ...
- CF 353C Find Maximum #205 (Div. 2)
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ]; ] ...
- java:内部类与外部类的区别和联系
注意事项一:在内部类中可以随意使用外部类的成员方法以及成员变量. 众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他类的访问.如在成员变量或者成员方法前面,加上Pri ...
- Linux下禁用、启用SeLinux
一些Linux默认都是启用SeLinux的,在安装操作系统的时候我们可以选择开启或者关闭SeLinux,但是在安装完系统之后又如何开启与关闭呢? 在/etc/sysconf下有一个SeLinux文件, ...
- 坑爹的Mysql
本想尝试下如何使用Spring来管理Hibernate的事务,当配置好Spring的配置文件后,进行插入数据,结果报错了,错误是: Mysql Field * doesn't have a defau ...
- Tomcat的SessionID引起的Session Fixation和Session Hijacking问题
上一篇说到<Spring MVC防御CSRF.XSS和SQL注入攻击>,今天说说SessionID带来的漏洞攻击问题.首先,什么是Session Fixation攻击和Session Hi ...
- QTP鼠标点击和浏览器事件的动态切换
今天在群里有人问到一个问题,我觉得应该会有很多人会碰到,今天根据自己的思路把这个解决方案整理出来,供自己和大家参考 需求描述: 当输入一个身份证号码的时候,这个号码所对应的数据会被加载到所属的省和市的 ...
- 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...
- ios越狱开发第一次尝试记录
1.THEOS的makefile文件中的THEOS_DEVICE_IP要写在第一行 2.如果make package install报错 dpkg status database is locked ...