1. 程式人生 > >【Android界面實現】SlidingMenu最新版本號使用具體解釋

【Android界面實現】SlidingMenu最新版本號使用具體解釋

-1 引入 rem ade eas str 技術分享 state offset

轉載請註明出處:http://blog.csdn.net/zhaokaiqiang1992

在非常久之前的一篇文章中,簡單的介紹了一下開源項目SlidingMenu控件的使用,這一篇文章,將比較具體的介紹最新版本號的SlidingMenu控件的用法。

SlidingMenu的github地址:https://github.com/jfeinstein10/SlidingMenu


將SlidingMenu整合到自己的項目之中

我們在使用開源的項目之前,都須要先將項目作為資源引入到我們當前的項目之中。在整合之前,先將github上項目的演示樣例代碼下載下來。導入到eclipse其中。關於將外部項目導入當前項目。有兩種做法。

(1)將資源項目作為library設置到我們的項目中,就像是演示樣例代碼中的ExampleListctivity一樣,例如以下圖所看到的。

有一點須要註意一下。由於在SlidingMenu演示樣例代碼裏面用到了ActionBarSharlock這個依賴project。因此,我們不光須要SlidingMenu的代碼。還須要ActionBarSharlockproject的資源項目。ActionBarSharlock的github項目地址是https://github.com/JakeWharton/ActionBarSherlock 大家能夠自行下載。

在設置好依賴project之後,我們就能夠使用SlidingMenu了。


技術分享


(2)除了採用上面這樣的依賴project的方法,我們還能夠直接將依賴project,也就是library項目裏面的代碼,直接復制到我們的目標項目裏面。我個人更喜歡這樣的方法,盡管這樣會添加project的安裝包的體積,可是。對於項目的管理來說,更加的方便。

在這個項目中。我們將以下的這個文件復制到我們的項目裏面就能夠了。


技術分享


加入SlidingMenu控件的方式

(1)繼承自SlidingFragmentActivity。假設是採用這樣的方式的話。我們的Activity須要繼承自SlidingFragmentActivity。SlidingFragmentActivity是SlidingMenu裏面的一個類。繼承自它,我們能夠擁有一個SlidingMenu控件。

假設我們想用這個方式,能夠參考以下的代碼。

package com.example.slidingmenudemo;

import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;

/**
 * 繼承自SlidingFragmentActivity的側滑欄實現,能夠實現側滑欄是fragment的側滑欄的效果
 * 
 * @author zhaokaiqiang
 * @see http://blog.csdn.net/zhaokaiqiang1992
 * 
 */
public class MethodOneActivity extends SlidingFragmentActivity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 設置主界面的布局文件
		setContentView(R.layout.activity_method_one);
		// 設置存放側滑欄的容器的布局文件
		setBehindContentView(R.layout.frame_menu);
		// 將側滑欄的fragment類填充到側滑欄的容器的布局文件裏
		FragmentTransaction transaction = getSupportFragmentManager()
				.beginTransaction();
		SampleListFragment fragment = new SampleListFragment();
		transaction.replace(R.id.menu_frame, fragment);
		transaction.commit();
		// 獲取到SlidingMenu對象。然後設置一些常見的屬性
		SlidingMenu sm = getSlidingMenu();
		// 設置陰影的寬度
		sm.setShadowWidth(0);
		// 設置陰影的顏色
		sm.setShadowDrawable(R.drawable.shadow);
		// 設置側滑欄全然展開之後。距離另外一邊的距離,單位px,設置的越大,側滑欄的寬度越小
		sm.setBehindOffset(100);
		// 設置漸變的程度。範圍是0-1.0f,設置的越大。則在側滑欄剛劃出的時候。顏色就越暗。1.0f的時候,顏色為全黑
		sm.setFadeDegree(0.3f);
		// 設置觸摸模式。能夠選擇全屏劃出,或者是邊緣劃出。或者是不可劃出
		sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		
		//設置actionBar是否能尾隨側滑欄移動,假設沒有,則能夠去掉
		setSlidingActionBarEnabled(false);
		
	}
}

使用這樣的實現方式。我們的側滑欄是使用一個Fragment實現的。通過setBehindContentView()方法,我們能夠設置放置側滑欄布局的容器。這個容器是一個很easy的布局文件,一般來說比較固定,比方像以下這樣就能夠

<?xml version="1.0" encoding="utf-8"?

> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/menu_frame" android:layout_width="match_parent" android:layout_height="match_parent" />


在這裏面,一個設置了id的FragmentLayout布局就可以。這樣我們就能夠通過transaction.replace(R.id.menu_frame, fragment);方法將我們側滑欄的Fragment填充到SlidingMenu之中。

由於SlidingFragmentActivity裏面已經集成了一個SlidingMenu。因此。我們通過getSlidingMenu()就能夠獲取到一個SilidingMenu對象,然後象上面的代碼一樣設置經常使用的屬性就能夠了。

通過這樣的方式加入SlidingMenu很的方便,可是我們必須繼承自SlidingFeagmentActivity,不免有一些限制。


(2)繼承自FragmentActivity

除了繼承SlidingMenu自帶的Activity之外,我們還能夠直接繼承自FragmentActivity,假設要通過這樣的方式。我們能夠參考以下的代碼實現。

package com.example.slidingmenudemo;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;

/**
 * 繼承自FragmentActivity的側滑欄實現,能夠實現側滑欄是fragment的側滑欄的效果
 * 
 * @author zhaokaiqiang
 * @see http://blog.csdn.net/zhaokaiqiang1992
 */
public class MethodTwoActivity extends FragmentActivity {

	private SlidingMenu menu;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_method_two);

		menu = new SlidingMenu(this);
		menu.setShadowWidth(0);
		menu.setShadowDrawable(R.drawable.shadow);
		menu.setBehindOffset(100);
		menu.setFadeDegree(0.35f);
		menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
		menu.setMenu(R.layout.frame_menu);
		getSupportFragmentManager().beginTransaction()
				.replace(R.id.menu_frame, new SampleListFragment()).commit();

	}
}

通過這樣的方式集成的話,我們須要自定義SlidingMenu。然後通過attachToActivity。將SlidingMenu連接到我們的FragmentActivity之上,setMenu()方式設置的是我們的側滑欄的容器的布局。和上面的第一種方法是一樣的。


其它經常使用屬性

(1)雙側滑欄 我們能夠通過以下的代碼實現雙側滑欄的效果
@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//設置左邊的側滑欄
		getSlidingMenu().setMode(SlidingMenu.LEFT_RIGHT);
		getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		setContentView(R.layout.content_frame);
		getSupportFragmentManager().beginTransaction()
				.replace(R.id.content_frame, new SampleListFragment()).commit();
		//設置右邊的側滑欄
		getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two);
		getSlidingMenu().setSecondaryShadowDrawable(R.drawable.shadowright);
		getSupportFragmentManager().beginTransaction()
				.replace(R.id.menu_frame_two, new SampleListFragment())
				.commit();
	}

(2)設置觸摸模式 通過getSlidingMenu().setTouchModeAbove()能夠設置側滑欄的觸摸模式,用以下3個常量值

SlidingMenu.TOUCHMODE_FULLSCREEN 全屏幕模式。全屏滑動都可打開

SlidingMenu.TOUCHMODE_MARGIN 側邊模式,僅僅在屏幕側邊滑動才幹打開,中心滑動不能打開

SlidingMenu.TOUCHMODE_NONE 禁止觸摸模式,不可以通過觸摸打開。僅僅可以通過SlidingMenu().toggle()打開或者是關閉

(3)設置側滑欄顯示動畫 通過SlidingMenu.setBehindCanvasTransformer(CanvasTransformer);方法能夠設置側滑欄的顯示動畫,參數是一個CanvasTransformer對象。以下是幾個常見的動畫的設置
折疊動畫
new CanvasTransformer() {
			@Override
			public void transformCanvas(Canvas canvas, float percentOpen) {
				canvas.scale(percentOpen, 1, 0, 0);
			}			
		}

放縮動畫
new CanvasTransformer() {
			@Override
			public void transformCanvas(Canvas canvas, float percentOpen) {
				float scale = (float) (percentOpen*0.25 + 0.75);
				canvas.scale(scale, scale, canvas.getWidth()/2, canvas.getHeight()/2);
			}
		}

上升動畫
private static Interpolator interp = new Interpolator() {
		@Override
		public float getInterpolation(float t) {
			t -= 1.0f;
			return t * t * t + 1.0f;
		}		
	};

new CanvasTransformer() {
			@Override
			public void transformCanvas(Canvas canvas, float percentOpen) {
				canvas.translate(0, canvas.getHeight()*(1-interp.getInterpolation(percentOpen)));
			}			
		}

其它的很多其它屬性。請自己查閱演示樣例代碼。

【Android界面實現】SlidingMenu最新版本號使用具體解釋