首页 > 代码库 > slidingmenu + fragment 左右菜单滑动
slidingmenu + fragment 左右菜单滑动
content_frame.xml
1 <?xml version="1.0" encoding="utf-8"?>2 <FrameLayout 3 xmlns:android="http://schemas.android.com/apk/res/android"4 android:id="@+id/content_frame"5 android:layout_width="match_parent"6 android:layout_height="match_parent" />
左侧 menu_frame.xml
1 <?xml version="1.0" encoding="utf-8"?>2 <FrameLayout 3 xmlns:android="http://schemas.android.com/apk/res/android"4 android:id="@+id/menu_frame"5 android:layout_width="match_parent"6 android:layout_height="match_parent" />
右侧 menu_frame_right.xml
1 <?xml version="1.0" encoding="utf-8"?>2 <FrameLayout 3 xmlns:android="http://schemas.android.com/apk/res/android"4 android:id="@+id/menu_frame_right"5 android:layout_width="match_parent"6 android:layout_height="match_parent" />
1 package com.cn.slidingmenu.fragment; 2 3 import com.actionbarsherlock.view.MenuItem; 4 import com.cn.slidingmenu.fragment.R; 5 import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; 6 import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.CanvasTransformer; 7 import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; 8 9 import android.graphics.Canvas; 10 import android.os.Bundle; 11 import android.support.v4.app.Fragment; 12 import android.view.animation.Interpolator; 13 14 /** 15 * slidingmenu + fragment 16 * 17 * @author dr 18 */ 19 public class MainActivity extends SlidingFragmentActivity { 20 21 private SlidingMenu sm; 22 private Fragment contentFragment; 23 private Fragment leftFragment; 24 25 @Override 26 public void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 setContentView(R.layout.content_frame); 29 30 // 设置SlidingMenu的layout 31 setBehindContentView(R.layout.menu_frame); 32 33 if (savedInstanceState == null) { 34 contentFragment = new Fragment1(); 35 } else { 36 // 取出之前保存的contentFragment 37 contentFragment = this.getSupportFragmentManager().getFragment( 38 savedInstanceState, "contentFragment"); 39 } 40 // 设置当前的fragment 41 // getSupportFragmentManager JAR包当中的 42 this.getSupportFragmentManager().beginTransaction() 43 .replace(R.id.content_frame, contentFragment).commit(); 44 45 /** 设置SlidingMenu属性和layout */ 46 // 得到SlidingMenu的对象 47 sm = getSlidingMenu(); 48 // 设置slidingmenu滑动的方式 49 sm.setMode(SlidingMenu.LEFT_RIGHT); 50 // 设置slidingmenu边界的阴影图片 51 sm.setShadowDrawable(R.drawable.shadow); 52 // 设置阴影的宽度 53 sm.setShadowWidthRes(R.dimen.shadow_width); 54 // 设置slidingmenu宽度 55 sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); 56 // 设置slidingmenu宽度 57 // sm.setBehindWidth(400); 58 // 设置滑出slidingmenu范围 59 sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 60 sm.setMenu(R.layout.menu_frame); 61 // 设置slidingmenu动画 62 sm.setBehindCanvasTransformer(null); 63 64 // 设置menu的fragment 65 leftFragment = new LeftFragment(); 66 this.getSupportFragmentManager().beginTransaction() 67 .replace(R.id.menu_frame, leftFragment).commit(); 68 69 // 设置右侧的slidingmenu 70 sm.setSecondaryMenu(R.layout.menu_frame_right); 71 sm.setSecondaryShadowDrawable(R.drawable.shadowright); 72 73 // 设置右侧滑出的slidingmenu 74 RightFragment rightFragment = new RightFragment(); 75 this.getSupportFragmentManager().beginTransaction() 76 .replace(R.id.menu_frame_right, rightFragment).commit(); 77 78 // 设置在slidingmenu页显示ActionBar 79 setSlidingActionBarEnabled(false); 80 // 是ActionBar的图标可以被点击 81 getSupportActionBar().setHomeButtonEnabled(true); 82 // 启用向左的图标 83 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 84 85 } 86 87 @Override 88 public boolean onMenuItemSelected(int featureId, MenuItem item) { 89 switch (item.getItemId()) { 90 case android.R.id.home: 91 // 动态打开或关闭slidingmenu 92 sm.toggle(); 93 break; 94 default: 95 break; 96 } 97 return true; 98 } 99 100 @Override101 protected void onSaveInstanceState(Bundle outState) {102 super.onSaveInstanceState(outState);103 // 1.bundle104 // 2.存放的ID105 // 3.当前要保存的fragment的实例106 this.getSupportFragmentManager().putFragment(outState,107 "contentFragment", contentFragment);108 }109 110 /**111 * 切换fragment112 * 113 * @param f114 */115 public void switchFragment(Fragment f) {116 contentFragment = f;117 this.getSupportFragmentManager().beginTransaction()118 .replace(R.id.content_frame, contentFragment).commit();119 sm.toggle();120 }121 122 /**123 * 缩放动画124 */125 private CanvasTransformer canvasTransformer = new CanvasTransformer() {126 127 @Override128 public void transformCanvas(Canvas canvas, float percentOpen) {129 float scale = (float) (percentOpen * 0.25 + 0.75);130 canvas.scale(scale, scale, canvas.getWidth() / 2,131 canvas.getHeight() / 2);132 }133 134 };135 private static Interpolator interp = new Interpolator() {136 @Override137 public float getInterpolation(float t) {138 t -= 1.0f;139 return t * t * t + 1.0f;140 }141 };142 143 /**144 * 从下网上动画145 */146 private CanvasTransformer canvasTransformer2 = new CanvasTransformer() {147 148 @Override149 public void transformCanvas(Canvas canvas, float percentOpen) {150 canvas.translate(151 0,152 canvas.getHeight()153 * (1 - interp.getInterpolation(percentOpen)));154 }155 156 };157 158 /**159 * 拉伸动画160 */161 private CanvasTransformer canvasTransformer3 = new CanvasTransformer() {162 @Override163 public void transformCanvas(Canvas canvas, float percentOpen) {164 canvas.scale(percentOpen, 1, 0, 0);165 166 }167 };168 169 }
1 package com.cn.slidingmenu.fragment; 2 3 import com.cn.slidingmenu.fragment.R; 4 import android.os.Bundle; 5 import android.support.v4.app.Fragment; 6 import android.view.LayoutInflater; 7 import android.view.View; 8 import android.view.ViewGroup; 9 import android.widget.TextView;10 11 public class Fragment1 extends Fragment {12 13 @Override14 public void onCreate(Bundle savedInstanceState) {15 super.onCreate(savedInstanceState);16 }17 @Override18 public View onCreateView(LayoutInflater inflater, ViewGroup container,19 Bundle savedInstanceState) {20 //设置fragment的layout21 View view = inflater.inflate(R.layout.text, null);22 TextView tv = (TextView) view.findViewById(R.id.test);23 tv.setText(Fragment1.class.getSimpleName());24 return view;25 }26 @Override27 public void onActivityCreated(Bundle savedInstanceState) {28 super.onActivityCreated(savedInstanceState);29 }30 31 }
1 package com.cn.slidingmenu.fragment; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import com.cn.slidingmenu.fragment.R; 6 import android.os.Bundle; 7 import android.support.v4.app.Fragment; 8 import android.view.LayoutInflater; 9 import android.view.View;10 import android.view.ViewGroup;11 import android.widget.AdapterView;12 import android.widget.AdapterView.OnItemClickListener;13 import android.widget.ArrayAdapter;14 import android.widget.ListView;15 16 public class LeftFragment extends Fragment implements OnItemClickListener {17 18 private View rootView;19 20 @Override21 public void onCreate(Bundle savedInstanceState) {22 super.onCreate(savedInstanceState);23 }24 25 @Override26 public View onCreateView(LayoutInflater inflater, ViewGroup container,27 Bundle savedInstanceState) {28 // 设置fragment的layout29 rootView = inflater.inflate(R.layout.activity_main, null);30 return rootView;31 }32 33 @Override34 public void onActivityCreated(Bundle savedInstanceState) {35 super.onActivityCreated(savedInstanceState);36 ListView lv = (ListView) rootView.findViewById(R.id.listview);37 38 List<String> list = initData();39 40 ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),41 android.R.layout.simple_list_item_1, android.R.id.text1, list);42 43 lv.setAdapter(adapter);44 lv.setOnItemClickListener(this);45 }46 47 /**48 * 初始化数据49 * @return50 */51 public List<String> initData() {52 List<String> list = new ArrayList<String>();53 list.add(Fragment1.class.getSimpleName());54 list.add(Fragment2.class.getSimpleName());55 list.add(Fragment3.class.getSimpleName());56 list.add(Fragment4.class.getSimpleName());57 list.add(Fragment5.class.getSimpleName());58 return list;59 }60 61 @Override62 public void onItemClick(AdapterView<?> parent, View view, int position,63 long id) {64 Fragment f = null;65 switch (position) {66 case 0:67 f = new Fragment1();68 break;69 case 1:70 f = new Fragment2();71 break;72 case 2:73 f = new Fragment3();74 break;75 case 3:76 f = new Fragment4();77 break;78 case 4:79 f = new Fragment5();80 break;81 default:82 f = new Fragment1();83 break;84 }85 switchFragment(f);86 }87 88 /**89 * listview item 点击时切换fragment90 * @param f91 */92 private void switchFragment(Fragment f) {93 if (getActivity() instanceof MainActivity) {94 MainActivity activity = (MainActivity) getActivity();95 activity.switchFragment(f);96 }97 }98 99 }
1 package com.cn.slidingmenu.fragment; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import android.os.Bundle; 6 import android.support.v4.app.Fragment; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.view.ViewGroup;10 import android.widget.ArrayAdapter;11 import android.widget.ListView;12 13 public class RightFragment extends Fragment {14 15 private View rootView;16 17 @Override18 public void onCreate(Bundle savedInstanceState) {19 super.onCreate(savedInstanceState);20 }21 22 @Override23 public View onCreateView(LayoutInflater inflater, ViewGroup container,24 Bundle savedInstanceState) {25 rootView = inflater.inflate(R.layout.activity_main, null);26 return rootView;27 }28 @Override29 public void onActivityCreated(Bundle savedInstanceState) {30 super.onActivityCreated(savedInstanceState);31 ListView lv = (ListView) rootView.findViewById(R.id.listview);32 List<String> list = initData();33 ArrayAdapter<String> adapter = new ArrayAdapter<String>(34 getActivity(), 35 android.R.layout.simple_list_item_1, 36 android.R.id.text1, 37 list);38 39 lv.setAdapter(adapter);40 }41 42 /**43 * 初始化数据44 * @return45 */46 public List<String> initData() {47 List<String> list = new ArrayList<String>();48 list.add(Fragment1.class.getSimpleName());49 list.add(Fragment2.class.getSimpleName());50 list.add(Fragment3.class.getSimpleName());51 list.add(Fragment4.class.getSimpleName());52 list.add(Fragment5.class.getSimpleName());53 return list;54 }55 56 }
DEMO下载地址:http://pan.baidu.com/s/1o6v7iX0
文件中三个包, SlidingMenuFragment21引用library,library引用actionbarsherlock。
slidingmenu + fragment 左右菜单滑动
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。