分享

android侧滑及Fragment的运用

 天海544 2014-03-05

  转载请注明出处:http://blog.csdn.net/gutaocslg/article/details/20444903

在使用android应用的过程中看见过很多漂亮的实现效果,其中侧滑就是一种。在这种效果中分为左滑、右滑和两种都支持。我今天结合了Slidingmenu这个框架和Fragment来实现左滑和右滑,有哪里不好的请大神们指点!下面就进行详细的分析。

首先新建一个android项目,主Activity是MainActivity并且关联Slidingmenu(这个可以在网上下载)。

看一下,Activity_main.xml:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas./apk/res/android"  
  3.     android:id="@+id/content_frame"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:background="#FFFFFF"/>  
MainActivity.java

  1. public class MainActivity extends FragmentActivity {  
  2.   
  3.     private SlidingMenu menu;  
  4.     private Fragment conFragment;  
  5.     private MenuFragment menuFragment;  
  6.     private Button button;  
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.           
  12.         conFragment = new ContentFragment();//新建主页  
  13.         menuFragment = new MenuFragment();//新建菜单  
  14.           
  15.         menu = new SlidingMenu(this,SlidingMenu.SLIDING_CONTENT);  
  16.         menu.setMenu(R.layout.menu_main);  
  17.         menu.setSecondaryMenu(R.layout.second_menu);  
  18. //      menu.setSecondaryShadowDrawable(R.drawable.shadow);  
  19.         menu.setShadowWidth(20);//设置阴影有立体效果  
  20.         menu.setShadowDrawable(R.drawable.shadow);  
  21.         menu.setBehindOffset(50);  
  22.         menu.setBehindScrollScale(1);  
  23.         menu.setBehindWidth((int) (getWindowManager().getDefaultDisplay().getWidth()*0.6));  
  24.         menu.setFadeDegree(1.0f);  
  25.         menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  26.         menu.setMode(SlidingMenu.LEFT_RIGHT);  
  27.           
  28.         initView();  
  29.     }  
  30.   
  31.     private void initView() {  
  32.           
  33.         button = (Button) this.findViewById(R.id.exit);  
  34.         button.setOnClickListener(new View.OnClickListener() {  
  35.               
  36.             @Override  
  37.             public void onClick(View v) {  
  38.                 MainActivity.this.finish();  
  39.             }  
  40.         });  
  41.           
  42.           
  43.         FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();  
  44.         ft.replace(R.id.content_frame, conFragment);  
  45.         ft.replace(R.id.menu_frame, menuFragment);  
  46.         ft.commit();  
  47.     }  
  48.       
  49.     //切换主页对应菜单的内容  
  50.     public void switchContent(Fragment fragment) {  
  51.         FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();  
  52.         conFragment = fragment;  
  53.         ft.replace(R.id.content_frame, conFragment);  
  54.         ft.addToBackStack(null);  
  55.         ft.commit();  
  56.         menu.showContent();  
  57.     }  
  58. }  

在上面的代码中很多人会关心菜单切换对应的内容的变化是怎么实现的,下面就看一下菜单MenuFragment的实现

  1. public class MenuFragment extends Fragment {  
  2.   
  3.     private LinearLayout layout;  
  4.     private ListView list;  
  5.     ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();  
  6.   
  7.     @Override  
  8.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  9.             Bundle savedInstanceState) {  
  10.   
  11.         layout = (LinearLayout) inflater.inflate(R.layout.menu_layout,  
  12.                 container, false);  
  13.         initView();  
  14.         return layout;  
  15.     }  
  16.   
  17.     private void initView() {  
  18.         //简单的构建菜单实例  
  19.         for (int i = 1; i <= 5; i++) {  
  20.             HashMap<String, Object> map = new HashMap<String, Object>();  
  21.             map.put("itemId", i);  
  22.             map.put("itemText", "菜单"+i);  
  23.             data.add(map);  
  24.         }  
  25.         list = (ListView) layout.findViewById(R.id.menu_list);  
  26.           
  27.         SimpleAdapter simperAdapter = new SimpleAdapter(getActivity(), data,  
  28.                 R.layout.item_menu, new String[] { "itemImage", "itemText" },  
  29.                 new int[] { R.id.menuitem_image, R.id.menuitem_text });  
  30.         list.setAdapter(simperAdapter);  
  31.         list.setSelector(R.drawable.menu_selector);  
  32.         list.setOnItemClickListener(new OnItemClickListener() {  
  33.   
  34.             @Override  
  35.             public void onItemClick(AdapterView<?> parent, View view,  
  36.                     int position, long id) {  
  37.                 if(getActivity() instanceof MainActivity) {  
  38.                     HashMap<String, Object> map = (HashMap<String, Object>) parent.getItemAtPosition(position);  
  39.                     int i = (Integer) map.get("itemId");  
  40.                     Fragment frag = getFragment(i);//获取对应页面的Fragment  
  41.                     ((MainActivity) getActivity()).switchContent(frag);  
  42.                 }  
  43.             }  
  44.         });  
  45.     }  
  46.   
  47.     public Fragment getFragment(int i) {  
  48.         switch (i) {  
  49.         case 1:  
  50.             return new ContentFragmentOne();  
  51.       
  52.         case 2:  
  53.             return new ContentFragmentTwo();  
  54.         case 3:  
  55.             return new ContentFragmentThree();  
  56.         case 4:  
  57.             return new ContentFragmentFour();  
  58.         case 5:  
  59.             return new ContentFragmentFive();  
  60.         default:  
  61.             return new ContentFragment();  
  62.         }  
  63.     }  
  64. }  

里面新建了多个菜单切换是所对应页面的Fragment这个朋友们可以下载我上传的源码可以看见。

下面来看一下效果图。


好了这篇的内容就到这了,希望大神给予批评建议!

下载地址:http://download.csdn.net/detail/gutaocslg/6989547

源码要关联Slidingmenu

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多