標籤:it_xiao小巫 android
Android UI-SlidingMenu側滑菜單效果
本篇部落格給大家分享一個效果比較好的側滑菜單的Demo,實現點擊左邊菜單切換Fragment。
效果如下:
主Activity代碼:
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 implementsOnClickListener {private ImageView topButton;private Fragment mContent;private TextView topTextView;@Overridepublic 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,否則執行個體化MyFragmentif (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);}@Overrideprotected 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);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.topButton:toggle();break;default:break;}}}
側邊欄菜單Fragment
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;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);}@Overridepublic 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);}@Overridepublic void onDestroyView() {super.onDestroyView();}@Overridepublic void onDestroy() {super.onDestroy();}@Overridepublic 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
Android UI-SlidingMenu側滑菜單效果