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控件。如果我們想用這個方式,可以參考下面的代碼。

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package com.example.slidingmenudemo;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v4.app.FragmentTransaction;  
  5.   
  6. import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;  
  7. import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;  
  8.   
  9. /** 
  10.  * 繼承自SlidingFragmentActivity的側滑欄實現,可以實現側滑欄是fragment的側滑欄的效果 
  11.  *  
  12.  * @author zhaokaiqiang 
  13.  * @see http://blog.csdn.net/zhaokaiqiang1992 
  14.  *  
  15.  */  
  16. public class MethodOneActivity extends SlidingFragmentActivity {  
  17.   
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         // 設置主界面的佈局文件  
  22.         setContentView(R.layout.activity_method_one);  
  23.         // 設置存放側滑欄的容器的佈局文件  
  24.         setBehindContentView(R.layout.frame_menu);  
  25.         // 將側滑欄的fragment類填充到側滑欄的容器的佈局文件中  
  26.         FragmentTransaction transaction = getSupportFragmentManager()  
  27.                 .beginTransaction();  
  28.         SampleListFragment fragment = new SampleListFragment();  
  29.         transaction.replace(R.id.menu_frame, fragment);  
  30.         transaction.commit();  
  31.         // 獲取到SlidingMenu對象,然後設置一些常見的屬性  
  32.         SlidingMenu sm = getSlidingMenu();  
  33.         // 設置陰影的寬度  
  34.         sm.setShadowWidth(0);  
  35.         // 設置陰影的顏色  
  36.         sm.setShadowDrawable(R.drawable.shadow);  
  37.         // 設置側滑欄完全展開之後,距離另外一邊的距離,單位px,設置的越大,側滑欄的寬度越小  
  38.         sm.setBehindOffset(100);  
  39.         // 設置漸變的程度,範圍是0-1.0f,設置的越大,則在側滑欄剛劃出的時候,顏色就越暗。1.0f的時候,顏色爲全黑  
  40.         sm.setFadeDegree(0.3f);  
  41.         // 設置觸摸模式,可以選擇全屏劃出,或者是邊緣劃出,或者是不可劃出  
  42.         sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  43.           
  44.         //設置actionBar能否跟隨側滑欄移動,如果沒有,則可以去掉  
  45.         setSlidingActionBarEnabled(false);  
  46.           
  47.     }  
  48. }  

    使用這種實現方式,我們的側滑欄是使用一個Fragment實現的,通過setBehindContentView()方法,我們可以設置放置側滑欄佈局的容器,這個容器是一個非常簡單的佈局文件,一般來說比較固定,比如像下面這樣就可以

[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/menu_frame"  
  4.     android:layout_width="match_parent"  
  5.     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,如果要通過這種方式,我們可以參考下面的代碼實現。

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package com.example.slidingmenudemo;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v4.app.FragmentActivity;  
  5.   
  6. import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;  
  7.   
  8. /** 
  9.  * 繼承自FragmentActivity的側滑欄實現,可以實現側滑欄是fragment的側滑欄的效果 
  10.  *  
  11.  * @author zhaokaiqiang 
  12.  * @see http://blog.csdn.net/zhaokaiqiang1992 
  13.  */  
  14. public class MethodTwoActivity extends FragmentActivity {  
  15.   
  16.     private SlidingMenu menu;  
  17.   
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.activity_method_two);  
  22.   
  23.         menu = new SlidingMenu(this);  
  24.         menu.setShadowWidth(0);  
  25.         menu.setShadowDrawable(R.drawable.shadow);  
  26.         menu.setBehindOffset(100);  
  27.         menu.setFadeDegree(0.35f);  
  28.         menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  29.         menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);  
  30.         menu.setMenu(R.layout.frame_menu);  
  31.         getSupportFragmentManager().beginTransaction()  
  32.                 .replace(R.id.menu_frame, new SampleListFragment()).commit();  
  33.   
  34.     }  
  35. }  

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


其他常用屬性

(1)雙側滑欄
    我們可以通過下面的代碼實現雙側滑欄的效果
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. @Override  
  2.     public void onCreate(Bundle savedInstanceState) {  
  3.         super.onCreate(savedInstanceState);  
  4.         //設置左邊的側滑欄  
  5.         getSlidingMenu().setMode(SlidingMenu.LEFT_RIGHT);  
  6.         getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  7.         setContentView(R.layout.content_frame);  
  8.         getSupportFragmentManager().beginTransaction()  
  9.                 .replace(R.id.content_frame, new SampleListFragment()).commit();  
  10.         //設置右邊的側滑欄  
  11.         getSlidingMenu().setSecondaryMenu(R.layout.menu_frame_two);  
  12.         getSlidingMenu().setSecondaryShadowDrawable(R.drawable.shadowright);  
  13.         getSupportFragmentManager().beginTransaction()  
  14.                 .replace(R.id.menu_frame_two, new SampleListFragment())  
  15.                 .commit();  
  16.     }  

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

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

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

SlidingMenu.TOUCHMODE_NONE    禁止觸摸模式,不能夠通過觸摸打開,只能夠通過SlidingMenu().toggle()打開或者是關閉

(3)設置側滑欄顯示動畫
通過SlidingMenu.setBehindCanvasTransformer(CanvasTransformer);方法可以設置側滑欄的顯示動畫,參數是一個CanvasTransformer對象。下面是幾個常見的動畫的設置

摺疊動畫
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. new CanvasTransformer() {  
  2.             @Override  
  3.             public void transformCanvas(Canvas canvas, float percentOpen) {  
  4.                 canvas.scale(percentOpen, 100);  
  5.             }             
  6.         }  

放縮動畫
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. new CanvasTransformer() {  
  2.             @Override  
  3.             public void transformCanvas(Canvas canvas, float percentOpen) {  
  4.                 float scale = (float) (percentOpen*0.25 + 0.75);  
  5.                 canvas.scale(scale, scale, canvas.getWidth()/2, canvas.getHeight()/2);  
  6.             }  
  7.         }  

上升動畫
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. private static Interpolator interp = new Interpolator() {  
  2.         @Override  
  3.         public float getInterpolation(float t) {  
  4.             t -= 1.0f;  
  5.             return t * t * t + 1.0f;  
  6.         }         
  7.     };  
  8.   
  9. new CanvasTransformer() {  
  10.             @Override  
  11.             public void transformCanvas(Canvas canvas, float percentOpen) {  
  12.                 canvas.translate(0, canvas.getHeight()*(1-interp.getInterpolation(percentOpen)));  
  13.             }             
  14.         }  

    其他的更多屬性,請自己查閱示例代碼。

原文地址:http://blog.csdn.net/jdsjlzx/article/details/42387903
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章