SlidingMenu開源項目滑動界面的實現總結

先上圖


需要準備的是先得在GitHub上下載ActionBarSherlock-master.zip,和SlidingMenu-master.zip這兩個開源文件,然後解壓這兩個包,SlidingMenu裏面的library文件導入到Eclipse的一個工程裏面(在這裏不強調利Import一個android工程),還有ActionBarSherlock裏面的actionbarsherlock文件導入到Eclipse當中。

導入之後就需要把library設置爲一個library方便以後再其他工程裏面調用,具體操作如下:

1.選中剛纔導入的library工程,Alt+Enter


點擊選中android,然後Add前面的actionbarsherlock文件(切記actionbarsherlock文件的路徑不要是中文名,並且要跟library還有平時需要新建工程的地址在同一個工作區——Workspace),然後勾選上面的islibrary;這一步的目的是讓我們的library(SlidingMenu剛纔導入的項目)關聯actionbarsherlock項目,因爲它用到了actionbarsherlock裏面的一些東西

2.如果做完第一步之後有的同學會發現可能會報錯,這是因爲library下的libs文件裏面的包android-support-v4.jar跟actionbarsherlock存在差異,當然由於library引用actionbarsherlock裏面的內容,所以我們可以刪除library下libs裏面的android-support-v4.jar,就可以


3.接下來就是修改library裏面的SlidingFragmentActivity.java讓它繼承SherlockFragmentActivity。

4.做完上面的下來就是自己新建項目來實踐證明一下。我最開始用的是SlidingMenu裏面的example導入之後,運行完美,毫無破綻,然後就想自己新建個試試,結果遇到了很多麻煩

首先就是需要把自己新建項目裏面的libs下的那個jar包刪除,有一部分同學是好的,但是我運氣不好,一直是R.java文件找不到,看底下報錯信息,都是在actionbarsherlock裏面缺省一些信息,

後來找了半天發現我需要修改新建項目裏面的AndroidMainfest.xml文件裏面的theme,改成 android:theme="@style/Theme.Sherlock" > 再此我得感謝那個叫“心塵”的同學幫了我。

不過還是有問題,R文件依然找不到,原因這次就和明瞭了,是因爲我使用的額Eclipse版本可能過高,它裏面新建工程的時候自身會依賴另外一個包,這也就是我每次新建一個工程自動多出來一個包的原因;然後鎖依賴的這個包裏面有很多東西和library是衝突的,有的重複定義過了,所以我果斷刪除這個包,然後繼續看哪裏報錯,找到報錯的地方繼續刪除,刪除之後再把Mainactivity繼承的類改爲最原始的Activity,會好,如果發現有menu相關的,繼續刪除即可


接下來就總結下SlidingMenu的一些屬性

SlidingMenu 常用屬性介紹:
menu.setMode(SlidingMenu.LEFT);//設置左滑菜單
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//設置滑動的屏幕範圍,該設置爲全屏區域都可以滑動
menu.setShadowDrawable(R.drawable.shadow);//設置陰影圖片
menu.setShadowWidthRes(R.dimen.shadow_width);//設置陰影圖片的寬度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu劃出時主頁面顯示的剩餘寬度
menu.setBehindWidth(400);//設置SlidingMenu菜單的寬度
menu.setFadeDegree(0.35f);//SlidingMenu滑動時的漸變程度
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上
menu.setMenu(R.layout.menu_layout);//設置menu的佈局文件
menu.toggle();//動態判斷自動關閉或開啓SlidingMenu
menu.showMenu();//顯示SlidingMenu
menu.showContent();//顯示內容
menu.setOnOpenListener(onOpenListener);//監聽slidingmenu打開
關於關閉menu有兩個監聽,簡單的來說,對於menu close事件,一個是when,一個是after
menu.OnClosedListener(OnClosedListener);//監聽slidingmenu關閉時事件
menu.OnClosedListener(OnClosedListener);//監聽slidingmenu關閉後事件

左右都可以劃出SlidingMenu菜單隻需要設置
menu.setMode(SlidingMenu.LEFT_RIGHT);屬性,然後設置右側菜單的佈局文件
menu.setSecondaryShadowDrawable(R.drawable.shadowright);//右側菜單的陰影圖片

設置SlidingMenu屬性
sm = getSlidingMenu();
//如果只顯示左側菜單就是用LEFT,右側就RIGHT,左右都支持就LEFT_RIGHT
sm.setMode(SlidingMenu.LEFT_RIGHT);//設置菜單滑動模式,菜單是出現在左側還是右側,還是左右兩側都有
sm.setShadowDrawable(R.drawable.shadow);//設置陰影的圖片資源
sm.setShadowWidthRes(R.dimen.shadow_width);//設置陰影圖片的寬度
//sm.setBehindWidth(200);//設置菜單的寬
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu劃出時主頁面顯示的剩餘寬度
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//設置滑動的區域

支持右側劃出菜單:
//SlidingMenu可以同時支持劃出左右兩側的菜單,互不衝突,而且動畫優美,體驗良好。
sm.setSecondaryMenu(R.layout.menu_frame2);//設置右側菜單
sm.setSecondaryShadowDrawable(R.drawable.shadowright);//設置右側菜單陰影的圖片資源
//右側SlidingMenu的Fragment
getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame2, new SampleListFragment()).commit();

slidingMenu = getSlidingMenu();
//設置是左滑還是右滑,還是左右都可以滑
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
//設置陰影寬度
slidingMenu.setShadowWidth(getWindowManager().getDefaultDisplay().getWidth() / 40);
//設置左菜單陰影圖片
slidingMenu.setShadowDrawable(R.drawable.shadow);
//設置右菜單陰影圖片
slidingMenu.setSecondaryShadowDrawable(R.drawable.right_shadow);
//設置菜單佔屏幕的比例
slidingMenu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5);
//設置滑動時菜單的是否淡入淡出
slidingMenu.setFadeEnabled(true);
//設置淡入淡出的比例
slidingMenu.setFadeDegree(0.4f);
//設置滑動時拖拽效果
slidingMenu.setBehindScrollScale(0);
//設置要使菜單滑動,觸碰屏幕的範圍
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

附上自己簡單寫的一段

SlidingMenu menu = new SlidingMenu(this);
		menu.setMode(SlidingMenu.LEFT);
		menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		menu.setShadowWidthRes(R.dimen.shadow_width);
		menu.setShadowDrawable(R.drawable.shadow);
		menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
		menu.setFadeDegree(0.35f);
		menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
		menu.setMenu(R.layout.left_drawer_fragment);
		menu.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {
			
			@Override
			public void onOpened() {
				// TODO Auto-generated method stub

			}
		});
		 init();
	}

	public void init() {
	//	LayoutInflater inflater = LayoutInflater.from();
	//	setVisible(R.layout.left_drawer_fragment);
		mLinearLayout = (LinearLayout)findViewById(R.id.textLayout);
		mTextView1 = (TextView) findViewById(R.id.textview1);
		mTextView2 = (TextView) findViewById(R.id.textview2);
		mTextView3 = (TextView) findViewById(R.id.textview3);
		mTextView4 = (TextView) findViewById(R.id.textview4);
		mTextView5 = (TextView) findViewById(R.id.textview5);
		mTextView6 = (TextView) findViewById(R.id.textview6);
		mTextView1.setOnClickListener(this);
		mTextView2.setOnClickListener(this);
		mTextView3.setOnClickListener(this);
		mTextView4.setOnClickListener(this);
		mTextView5.setOnClickListener(this);
		mTextView6.setOnClickListener(this);
	}

	@Override
	public void onClick(View view) {
		// TODO Auto-generated method stub
		switch (view.getId()) {
		case R.id.textview1:
			mLayout.setBackgroundColor(Color.BLUE);
			break;
		case R.id.textview2:
			mLayout.setBackgroundColor(Color.GREEN);
			break;
		case R.id.textview3:
		case R.id.textview4:
		case R.id.textview5:
		case R.id.textview6:
			mLayout.setBackgroundColor(Color.WHITE);
			break;

		}
	}

唯一用到的圖片隨便找一個代替即可
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章