zoukankan      html  css  js  c++  java
  • 转 android 侧滑实现

    本篇博客给大家分享一个效果比较好的侧滑菜单的Demo,实现点击左边菜单切换Fragment。

    效果如下:

    主Activity代码:

    1. package com.infzm.slidingmenu.demo;  
    2.   
    3. import android.os.Bundle;  
    4. import android.support.v4.app.Fragment;  
    5. import android.view.View;  
    6. import android.view.View.OnClickListener;  
    7. import android.view.Window;  
    8. import android.widget.ImageView;  
    9. import android.widget.TextView;  
    10.   
    11. import com.infzm.slidingmenu.demo.fragment.LeftFragment;  
    12. import com.infzm.slidingmenu.demo.fragment.TodayFragment;  
    13. import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;  
    14. import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;  
    15.   
    16. /** 
    17.  * @date 2014/11/14 
    18.  * @author wuwenjie 
    19.  * @description 主界面 
    20.  */  
    21. public class MainActivity extends SlidingFragmentActivity implements  
    22.         OnClickListener {  
    23.   
    24.     private ImageView topButton;  
    25.     private Fragment mContent;  
    26.     private TextView topTextView;  
    27.   
    28.     @Override  
    29.     public void onCreate(Bundle savedInstanceState) {  
    30.         requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题  
    31.         super.onCreate(savedInstanceState);  
    32.         setContentView(R.layout.activity_main);  
    33.         initSlidingMenu(savedInstanceState);  
    34.   
    35.         topButton = (ImageView) findViewById(R.id.topButton);  
    36.         topButton.setOnClickListener(this);  
    37.         topTextView = (TextView) findViewById(R.id.topTv);  
    38.     }  
    39.   
    40.     /** 
    41.      * 初始化侧边栏 
    42.      */  
    43.     private void initSlidingMenu(Bundle savedInstanceState) {  
    44.         // 如果保存的状态不为空则得到之前保存的Fragment,否则实例化MyFragment  
    45.         if (savedInstanceState != null) {  
    46.             mContent = getSupportFragmentManager().getFragment(  
    47.                     savedInstanceState, "mContent");  
    48.         }  
    49.   
    50.         if (mContent == null) {  
    51.             mContent = new TodayFragment();  
    52.         }  
    53.   
    54.         // 设置左侧滑动菜单  
    55.         setBehindContentView(R.layout.menu_frame_left);  
    56.         getSupportFragmentManager().beginTransaction()  
    57.                 .replace(R.id.menu_frame, new LeftFragment()).commit();  
    58.   
    59.         // 实例化滑动菜单对象  
    60.         SlidingMenu sm = getSlidingMenu();  
    61.         // 设置可以左右滑动的菜单  
    62.         sm.setMode(SlidingMenu.LEFT);  
    63.         // 设置滑动阴影的宽度  
    64.         sm.setShadowWidthRes(R.dimen.shadow_width);  
    65.         // 设置滑动菜单阴影的图像资源  
    66.         sm.setShadowDrawable(null);  
    67.         // 设置滑动菜单视图的宽度  
    68.         sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);  
    69.         // 设置渐入渐出效果的值  
    70.         sm.setFadeDegree(0.35f);  
    71.         // 设置触摸屏幕的模式,这里设置为全屏  
    72.         sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
    73.         // 设置下方视图的在滚动时的缩放比例  
    74.         sm.setBehindScrollScale(0.0f);  
    75.   
    76.     }  
    77.   
    78.     @Override  
    79.     protected void onSaveInstanceState(Bundle outState) {  
    80.         super.onSaveInstanceState(outState);  
    81.         getSupportFragmentManager().putFragment(outState, "mContent", mContent);  
    82.     }  
    83.   
    84.     /** 
    85.      * 切换Fragment 
    86.      *  
    87.      * @param fragment 
    88.      */  
    89.     public void switchConent(Fragment fragment, String title) {  
    90.         mContent = fragment;  
    91.         getSupportFragmentManager().beginTransaction()  
    92.                 .replace(R.id.content_frame, fragment).commit();  
    93.         getSlidingMenu().showContent();  
    94.         topTextView.setText(title);  
    95.     }  
    96.   
    97.     @Override  
    98.     public void onClick(View v) {  
    99.         switch (v.getId()) {  
    100.         case R.id.topButton:  
    101.             toggle();  
    102.             break;  
    103.         default:  
    104.             break;  
    105.         }  
    106.     }  
    107.   
    108. }  
    package com.infzm.slidingmenu.demo;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Window;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import com.infzm.slidingmenu.demo.fragment.LeftFragment;
    import com.infzm.slidingmenu.demo.fragment.TodayFragment;
    import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
    import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
    
    /**
     * @date 2014/11/14
     * @author wuwenjie
     * @description 主界面
     */
    public class MainActivity extends SlidingFragmentActivity implements
    		OnClickListener {
    
    	private ImageView topButton;
    	private Fragment mContent;
    	private TextView topTextView;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		initSlidingMenu(savedInstanceState);
    
    		topButton = (ImageView) findViewById(R.id.topButton);
    		topButton.setOnClickListener(this);
    		topTextView = (TextView) findViewById(R.id.topTv);
    	}
    
    	/**
    	 * 初始化侧边栏
    	 */
    	private void initSlidingMenu(Bundle savedInstanceState) {
    		// 如果保存的状态不为空则得到之前保存的Fragment,否则实例化MyFragment
    		if (savedInstanceState != null) {
    			mContent = getSupportFragmentManager().getFragment(
    					savedInstanceState, "mContent");
    		}
    
    		if (mContent == null) {
    			mContent = new TodayFragment();
    		}
    
    		// 设置左侧滑动菜单
    		setBehindContentView(R.layout.menu_frame_left);
    		getSupportFragmentManager().beginTransaction()
    				.replace(R.id.menu_frame, new LeftFragment()).commit();
    
    		// 实例化滑动菜单对象
    		SlidingMenu sm = getSlidingMenu();
    		// 设置可以左右滑动的菜单
    		sm.setMode(SlidingMenu.LEFT);
    		// 设置滑动阴影的宽度
    		sm.setShadowWidthRes(R.dimen.shadow_width);
    		// 设置滑动菜单阴影的图像资源
    		sm.setShadowDrawable(null);
    		// 设置滑动菜单视图的宽度
    		sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    		// 设置渐入渐出效果的值
    		sm.setFadeDegree(0.35f);
    		// 设置触摸屏幕的模式,这里设置为全屏
    		sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    		// 设置下方视图的在滚动时的缩放比例
    		sm.setBehindScrollScale(0.0f);
    
    	}
    
    	@Override
    	protected void onSaveInstanceState(Bundle outState) {
    		super.onSaveInstanceState(outState);
    		getSupportFragmentManager().putFragment(outState, "mContent", mContent);
    	}
    
    	/**
    	 * 切换Fragment
    	 * 
    	 * @param fragment
    	 */
    	public void switchConent(Fragment fragment, String title) {
    		mContent = fragment;
    		getSupportFragmentManager().beginTransaction()
    				.replace(R.id.content_frame, fragment).commit();
    		getSlidingMenu().showContent();
    		topTextView.setText(title);
    	}
    
    	@Override
    	public void onClick(View v) {
    		switch (v.getId()) {
    		case R.id.topButton:
    			toggle();
    			break;
    		default:
    			break;
    		}
    	}
    
    }
    



    侧边栏菜单Fragment

    1. package com.infzm.slidingmenu.demo.fragment;  
    2.   
    3. import android.app.Activity;  
    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.View.OnClickListener;  
    9. import android.view.ViewGroup;  
    10.   
    11. import com.infzm.slidingmenu.demo.MainActivity;  
    12. import com.infzm.slidingmenu.demo.R;  
    13. /** 
    14.  * @date 2014/11/14 
    15.  * @author wuwenjie 
    16.  * @description 侧边栏菜单 
    17.  */  
    18. public class LeftFragment extends Fragment implements OnClickListener{  
    19.     private View todayView;  
    20.     private View lastListView;  
    21.     private View discussView;  
    22.     private View favoritesView;  
    23.     private View commentsView;  
    24.     private View settingsView;  
    25.       
    26.       
    27.     @Override  
    28.     public void onCreate(Bundle savedInstanceState) {  
    29.         super.onCreate(savedInstanceState);  
    30.     }  
    31.       
    32.     @Override  
    33.     public void onAttach(Activity activity) {  
    34.         super.onAttach(activity);  
    35.     }  
    36.       
    37.     @Override  
    38.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
    39.             Bundle savedInstanceState) {  
    40.         View view = inflater.inflate(R.layout.layout_menu, null);  
    41.         findViews(view);  
    42.           
    43.         return view;  
    44.     }  
    45.       
    46.       
    47.     public void findViews(View view) {  
    48.         todayView = view.findViewById(R.id.tvToday);  
    49.         lastListView = view.findViewById(R.id.tvLastlist);  
    50.         discussView = view.findViewById(R.id.tvDiscussMeeting);  
    51.         favoritesView = view.findViewById(R.id.tvMyFavorites);  
    52.         commentsView = view.findViewById(R.id.tvMyComments);  
    53.         settingsView = view.findViewById(R.id.tvMySettings);  
    54.           
    55.         todayView.setOnClickListener(this);  
    56.         lastListView.setOnClickListener(this);  
    57.         discussView.setOnClickListener(this);  
    58.         favoritesView.setOnClickListener(this);  
    59.         commentsView.setOnClickListener(this);  
    60.         settingsView.setOnClickListener(this);  
    61.     }  
    62.       
    63.     @Override  
    64.     public void onDestroyView() {  
    65.         super.onDestroyView();  
    66.     }  
    67.       
    68.     @Override  
    69.     public void onDestroy() {  
    70.         super.onDestroy();  
    71.     }  
    72.   
    73.     @Override  
    74.     public void onClick(View v) {  
    75.         Fragment newContent = null;  
    76.         String title = null;  
    77.         switch (v.getId()) {  
    78.         case R.id.tvToday: // 今日  
    79.             newContent = new TodayFragment();  
    80.             title = getString(R.string.today);  
    81.             break;  
    82.         case R.id.tvLastlist:// 往期列表  
    83.             newContent = new LastListFragment();  
    84.             title = getString(R.string.lastList);  
    85.             break;  
    86.         case R.id.tvDiscussMeeting: // 讨论集会  
    87.             newContent = new DiscussFragment();  
    88.             title = getString(R.string.discussMeetting);  
    89.             break;  
    90.         case R.id.tvMyFavorites: // 我的收藏  
    91.             newContent = new MyFavoritesFragment();  
    92.             title = getString(R.string.myFavorities);  
    93.             break;  
    94.         case R.id.tvMyComments: // 我的评论  
    95.             newContent = new MyCommentsFragment();  
    96.             title = getString(R.string.myComments);  
    97.             break;  
    98.         case R.id.tvMySettings: // 设置  
    99.             newContent = new MySettingsFragment();  
    100.             title = getString(R.string.settings);  
    101.             break;  
    102.         default:  
    103.             break;  
    104.         }  
    105.         if (newContent != null) {  
    106.             switchFragment(newContent, title);  
    107.         }  
    108.     }  
    109.       
    110.     /** 
    111.      * 切换fragment 
    112.      * @param fragment 
    113.      */  
    114.     private void switchFragment(Fragment fragment, String title) {  
    115.         if (getActivity() == null) {  
    116.             return;  
    117.         }  
    118.         if (getActivity() instanceof MainActivity) {  
    119.             MainActivity fca = (MainActivity) getActivity();  
    120.             fca.switchConent(fragment, title);  
    121.         }  
    122.     }  
    123.       
    124. }  
    package com.infzm.slidingmenu.demo.fragment;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    
    import com.infzm.slidingmenu.demo.MainActivity;
    import com.infzm.slidingmenu.demo.R;
    /**
     * @date 2014/11/14
     * @author wuwenjie
     * @description 侧边栏菜单
     */
    public class LeftFragment extends Fragment implements OnClickListener{
    	private View todayView;
    	private View lastListView;
    	private View discussView;
    	private View favoritesView;
    	private View commentsView;
    	private View settingsView;
    	
    	
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    	}
    	
    	@Override
    	public void onAttach(Activity activity) {
    		super.onAttach(activity);
    	}
    	
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		View view = inflater.inflate(R.layout.layout_menu, null);
    		findViews(view);
    		
    		return view;
    	}
    	
    	
    	public void findViews(View view) {
    		todayView = view.findViewById(R.id.tvToday);
    		lastListView = view.findViewById(R.id.tvLastlist);
    		discussView = view.findViewById(R.id.tvDiscussMeeting);
    		favoritesView = view.findViewById(R.id.tvMyFavorites);
    		commentsView = view.findViewById(R.id.tvMyComments);
    		settingsView = view.findViewById(R.id.tvMySettings);
    		
    		todayView.setOnClickListener(this);
    		lastListView.setOnClickListener(this);
    		discussView.setOnClickListener(this);
    		favoritesView.setOnClickListener(this);
    		commentsView.setOnClickListener(this);
    		settingsView.setOnClickListener(this);
    	}
    	
    	@Override
    	public void onDestroyView() {
    		super.onDestroyView();
    	}
    	
    	@Override
    	public void onDestroy() {
    		super.onDestroy();
    	}
    
    	@Override
    	public void onClick(View v) {
    		Fragment newContent = null;
    		String title = null;
    		switch (v.getId()) {
    		case R.id.tvToday: // 今日
    			newContent = new TodayFragment();
    			title = getString(R.string.today);
    			break;
    		case R.id.tvLastlist:// 往期列表
    			newContent = new LastListFragment();
    			title = getString(R.string.lastList);
    			break;
    		case R.id.tvDiscussMeeting: // 讨论集会
    			newContent = new DiscussFragment();
    			title = getString(R.string.discussMeetting);
    			break;
    		case R.id.tvMyFavorites: // 我的收藏
    			newContent = new MyFavoritesFragment();
    			title = getString(R.string.myFavorities);
    			break;
    		case R.id.tvMyComments: // 我的评论
    			newContent = new MyCommentsFragment();
    			title = getString(R.string.myComments);
    			break;
    		case R.id.tvMySettings: // 设置
    			newContent = new MySettingsFragment();
    			title = getString(R.string.settings);
    			break;
    		default:
    			break;
    		}
    		if (newContent != null) {
    			switchFragment(newContent, title);
    		}
    	}
    	
    	/**
    	 * 切换fragment
    	 * @param fragment
    	 */
    	private void switchFragment(Fragment fragment, String title) {
    		if (getActivity() == null) {
    			return;
    		}
    		if (getActivity() instanceof MainActivity) {
    			MainActivity fca = (MainActivity) getActivity();
    			fca.switchConent(fragment, title);
    		}
    	}
    	
    }
    


    上面是核心代码,引入SlidingMenu开源库。

    Demo下载地址:http://download.csdn.net/download/wwj_748/8184889

  • 相关阅读:
    自己回答自己的问题
    作业5 四则运算 测试与封装 5.1 5.2
    2015430 加法阶段一的封装测试
    20150423 提问2
    Java 泛型中的<? super T>和<? extends T>
    ssh 查看端口占用
    Java 回调
    SpringMVC4+MyBaits3配置
    Selenium 远程执行和监听类
    Intellij idea主题
  • 原文地址:https://www.cnblogs.com/jokerjason/p/5683243.html
Copyright © 2011-2022 走看看