zoukankan      html  css  js  c++  java
  • 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     @Override
    101     protected void onSaveInstanceState(Bundle outState) {
    102         super.onSaveInstanceState(outState);
    103         // 1.bundle
    104         // 2.存放的ID
    105         // 3.当前要保存的fragment的实例
    106         this.getSupportFragmentManager().putFragment(outState,
    107                 "contentFragment", contentFragment);
    108     }
    109 
    110     /**
    111      * 切换fragment
    112      * 
    113      * @param f
    114      */
    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         @Override
    128         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         @Override
    137         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         @Override
    149         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         @Override
    163         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     @Override
    14     public void onCreate(Bundle savedInstanceState) {
    15         super.onCreate(savedInstanceState);
    16     }
    17     @Override
    18     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    19             Bundle savedInstanceState) {
    20         //设置fragment的layout
    21         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     @Override
    27     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     @Override
    21     public void onCreate(Bundle savedInstanceState) {
    22         super.onCreate(savedInstanceState);
    23     }
    24 
    25     @Override
    26     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    27             Bundle savedInstanceState) {
    28         // 设置fragment的layout
    29         rootView = inflater.inflate(R.layout.activity_main, null);
    30         return rootView;
    31     }
    32 
    33     @Override
    34     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      * @return
    50      */
    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     @Override
    62     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 点击时切换fragment
    90      * @param f
    91      */
    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     @Override
    18     public void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20     }
    21     
    22     @Override
    23     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    24             Bundle savedInstanceState) {
    25         rootView = inflater.inflate(R.layout.activity_main, null);
    26         return rootView;
    27     }
    28     @Override
    29     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      * @return
    45      */
    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。

  • 相关阅读:
    Socket
    Cookie & Session
    一些快捷键&工具的用法收集
    过桥问题及一些想法
    微信初步开发(测试用)
    代码的编写习惯
    Python爬虫简单笔记
    如何降低AzurePaasSQL的表占用空间
    Sonar代码检测工具安装与使用及问题记录
    AzureDevops发布Artifact
  • 原文地址:https://www.cnblogs.com/androidsj/p/4000802.html
Copyright © 2011-2022 走看看