【Android介面實現】SlidingMenu最新版本使用詳解

來源:互聯網
上載者:User

標籤:slidingmenu 側滑欄

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

    在很久之前的一篇文章中,簡單的介紹了一下開源項目SlidingMenu控制項的使用,這一篇文章,將比較詳細的介紹最新版本的SlidingMenu控制項的使用方法。

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


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

    我們在使用開源的項目之前,都需要先將項目作為資源引入到我們當前的項目之中。在整合之前,先將github上項目的範例程式碼下載下來,匯入到eclipse當中。關於將外部項目匯入當前項目,有兩種做法。

    (1)將資源項目作為library設定到我們的項目中,就像是範例程式碼中的ExampleListctivity一樣,如所示。有一點需要注意一下,因為在SlidingMenu範例程式碼裡面用到了ActionBarSharlock這個依賴工程,因此,我們不光需要SlidingMenu的代碼,還需要ActionBarSharlock工程的資源項目。ActionBarSharlock的github項目地址是https://github.com/JakeWharton/ActionBarSherlock 大家可以自行下載。在設定好依賴工程之後,我們就可以使用SlidingMenu了。




    (2)除了採用上面這種依賴工程的方法,我們還可以直接將依賴工程,也就是library項目裡面的代碼,直接拷貝到我們的目標項目裡面。我個人更喜歡這種方法,雖然這樣會增加工程的安裝包的體積,但是,對於項目的管理來說,更加的方便。在這個項目中,我們將下面的這個檔案複製到我們的項目裡面就可以了。




添加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 {@Overridepublic 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()方法,我們可以設定放置側滑欄布局的容器,這個容器是一個非常簡單的布局檔案,一般來說比較固定,比如像下面這樣就可以

<?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;@Overridepublic 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)雙側滑欄    我們可以通過下面的代碼實現雙側滑欄的效果
@Overridepublic 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() {@Overridepublic void transformCanvas(Canvas canvas, float percentOpen) {canvas.scale(percentOpen, 1, 0, 0);}}

放縮動畫
new CanvasTransformer() {@Overridepublic 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() {@Overridepublic float getInterpolation(float t) {t -= 1.0f;return t * t * t + 1.0f;}};new CanvasTransformer() {@Overridepublic void transformCanvas(Canvas canvas, float percentOpen) {canvas.translate(0, canvas.getHeight()*(1-interp.getInterpolation(percentOpen)));}}

    其他的更多屬性,請自己查閱範例程式碼。

【Android介面實現】SlidingMenu最新版本使用詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.