1. 程式人生 > >Android滑動選單特效實現,仿人人客戶端側滑效果

Android滑動選單特效實現,仿人人客戶端側滑效果

人人客戶端有一個特效還是挺吸引人的,在主介面手指向右滑動,就可以將選單展示出來,而主介面會被隱藏大部分,但是仍有左側的一小部分同選單一起展示。

據說人人客戶端的這個特效是從facebook客戶端模仿來的,至於facebook是不是又從其它地方模仿來的就不得而知了。好,今天我們就一起來實現這個效果,總之我第一次看到這個特效是在人人客戶端看到的,我也就主觀性地認為我是在模仿人人客戶端的特效了。

雖然現在網上類似這種效果的實現也非常多,可是我發現實現方案大都非常複雜,並不容易理解。但其實這種效果並不難實現,因此我今天給大家帶來的也是史上最簡單的滑動選單實現方案。

首先還是講一下實現原理。在一個Activity的佈局中需要有兩部分,一個是選單(menu)的佈局,一個是內容(content)的佈局。兩個佈局橫向排列,選單佈局在左,內容佈局在右。初始化的時候將選單佈局向左偏移,以至於能夠完全隱藏,這樣內容佈局就會完全顯示在Activity中。然後通過監聽手指滑動事件,來改變選單佈局的左偏移距離,從而控制選單佈局的顯示和隱藏。原理圖如下:


將選單佈局的左偏移值改成0時,效果圖如下:

好,我們開始用程式碼來實現。首先在Eclipse中新建一個Android專案,專案名就叫做RenRenSlideMenuDemo。然後寫一下佈局檔案,建立或開啟layout目錄下的activity_main.xml檔案,加入如下程式碼:

  1. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width
    ="fill_parent"
  4.     android:layout_height="fill_parent"
  5.     android:orientation="horizontal"
  6.     tools:context=".MainActivity">
  7.     <LinearLayout
  8.         android:id="@+id/menu"
  9.         android:layout_width="fill_parent"
  10.         android:layout_height="fill_parent"
  11.         android:background
    ="@drawable/menu">
  12.     </LinearLayout>
  13.     <LinearLayout
  14.         android:id="@+id/content"
  15.         android:layout_width="fill_parent"
  16.         android:layout_height="fill_parent"
  17.         android:background="@drawable/content">
  18.     </LinearLayout>
  19. </LinearLayout>
這個佈局檔案的最外層佈局是一個LinearLayout,排列方向是水平方向排列。這個LinearLayout下面嵌套了兩個子LinearLayout,分別就是選單的佈局和內容的佈局。這裡為了要讓佈局儘量簡單,選單佈局和內容佈局裡面沒有加入任何控制元件,只是給這兩個佈局各添加了一張背景圖片,這兩張背景圖片是我從人人客戶端上截下來的圖。這樣我們可以把注意力都集中在如何實現滑動選單的效果上面,不用關心裡面各種複雜的佈局了。

建立或開啟MainActivity,這個類仍然是程式的主Activity,也是這次demo唯一的Activity,在裡面加入如下程式碼:

  1. publicclass MainActivity extends Activity implements OnTouchListener {  
  2.     /** 
  3.      * 滾動顯示和隱藏menu時,手指滑動需要達到的速度。 
  4.      */
  5.     publicstaticfinalint SNAP_VELOCITY = 200;  
  6.     /** 
  7.      * 螢幕寬度值。 
  8.      */
  9.     privateint screenWidth;  
  10.     /** 
  11.      * menu最多可以滑動到的左邊緣。值由menu佈局的寬度來定,marginLeft到達此值之後,不能再減少。 
  12.      */
  13.     privateint leftEdge;  
  14.     /** 
  15.      * menu最多可以滑動到的右邊緣。值恆為0,即marginLeft到達0之後,不能增加。 
  16.      */
  17.     privateint rightEdge = 0;  
  18.     /** 
  19.      * menu完全顯示時,留給content的寬度值。 
  20.      */
  21.     privateint menuPadding = 80;  
  22.     /** 
  23.      * 主內容的佈局。 
  24.      */
  25.     private View content;  
  26.     /** 
  27.      * menu的佈局。 
  28.      */
  29.     private View menu;  
  30.     /** 
  31.      * menu佈局的引數,通過此引數來更改leftMargin的值。 
  32.      */
  33.     private LinearLayout.LayoutParams menuParams;  
  34.     /** 
  35.      * 記錄手指按下時的橫座標。 
  36.      */
  37.     privatefloat xDown;  
  38.     /** 
  39.      * 記錄手指移動時的橫座標。 
  40.      */
  41.     privatefloat xMove;  
  42.     /** 
  43.      * 記錄手機擡起時的橫座標。 
  44.      */
  45.     privatefloat xUp;  
  46.     /** 
  47.      * menu當前是顯示還是隱藏。只有完全顯示或隱藏menu時才會更改此值,滑動過程中此值無效。 
  48.      */
  49.     privateboolean isMenuVisible;  
  50.     /** 
  51.      * 用於計算手指滑動的速度。 
  52.      */
  53.     private VelocityTracker mVelocityTracker;  
  54.     @Override
  55.     protectedvoid onCreate(Bundle savedInstanceState) {  
  56.         super.onCreate(savedInstanceState);  
  57.         setContentView(R.layout.activity_main);  
  58.         initValues();  
  59.         content.setOnTouchListener(this);  
  60.     }  
  61.     /** 
  62.      * 初始化一些關鍵性資料。包括獲取螢幕的寬度,給content佈局重新設定寬度,給menu佈局重新設定寬度和偏移距離等。 
  63.      */
  64.     privatevoid initValues() {  
  65.         WindowManager window = (WindowManager) getSystemService(Context.WINDOW_SERVICE);  
  66.         screenWidth = window.getDefaultDisplay().getWidth();  
  67.         content = findViewById(R.id.content);  
  68.         menu = findViewById(R.id.menu);  
  69.         menuParams = (LinearLayout.LayoutParams) menu.getLayoutParams();  
  70.         // 將menu的寬度設定為螢幕寬度減去menuPadding
  71.         menuParams.width = screenWidth - menuPadding;  
  72.         // 左邊緣的值賦值為menu寬度的負數
  73.         leftEdge = -menuParams.width;  
  74.         // menu的leftMargin設定為左邊緣的值,這樣初始化時menu就變為不可見
  75.         menuParams.leftMargin = leftEdge;  
  76.         // 將content的寬度設定為螢幕寬度
  77.         content.getLayoutParams().width = screenWidth;  
  78.     }  
  79.     @Override
  80. 相關推薦

    Android滑動選單特效實現仿人人客戶效果史上最簡單的實現

                    人人客戶端有一個特效還是挺吸引人的,在主介面手指向右滑動,就可以將選單展示出來,而主介面會被隱藏大部分,但是仍有左側的一小部分同選單一起展示。據說人人客戶端的這個特效是從facebook客戶端模仿來的,至於facebook是不是又從其它地方模仿來的就不得而知了。好,今天我們就一

    Android滑動選單特效實現仿人人客戶效果

    人人客戶端有一個特效還是挺吸引人的,在主介面手指向右滑動,就可以將選單展示出來,而主介面會被隱藏大部分,但是仍有左側的一小部分同選單一起展示。 據說人人客戶端的這個特效是從facebook客戶端模仿來的,至於facebook是不是又從其它地方模仿來的就不得而

    Android滑動選單特效實現選單實現

    人人客戶端有一個特效還是挺吸引人的,在主介面手指向右滑動,就可以將選單展示出來,而主介面會被隱藏大部分,但是仍有左側的一小部分同選單一起展示。 據說人人客戶端的這個特效是從facebook客戶端模仿來的,至於facebook是不是又從其它地方模仿來的就不得而知了。好,今天我們就一起來實現這個效果,總之我

    Android學習筆記(四)之碎片化Fragment實現仿人人客戶邊欄

        其實一種好的UI佈局,可以使使用者感到更加的親切與方便。最近非常流行的莫過於側邊欄了,其實我也做過很多側邊欄的應用,但是那些側邊欄的使用我都不是很滿意,現在重新整理,重新寫了一個相對來說我比較滿意的側邊欄,其中運用的就是android3.0版本之後新加的Fragme

    Android 指紋掃描動畫實現仿新版360手機助手歡迎頁

    轉載請標明出處:http://blog.csdn.net/edisonchang/article/details/49914553 最近看到360手機助手改版了,自己也裝了一個,整體的體驗還是比較不錯,在新版的使用者引導頁有一個指紋的掃描動畫,掃描時候會有一個

    Android桌面懸浮窗效果實現仿360手機衛士懸浮窗效果

    大家好,今天給大家帶來一個仿360手機衛士懸浮窗效果的教程,在開始之前請允許我先說幾句不相干的話。不知不覺我發現自己接觸Android已有近三個年頭了,期間各種的成長少不了各位高手的幫助,總是有很多高手喜歡把自己的經驗寫在網上,供大家來學習,我也是從中受惠了很多,在此我深表感

    Android使用DrawerLayout仿qq6.6版本效果

    一講到側滑選單,我相信大家都會想到一個開源控制元件SlidingMenu,在google還沒有出來DrawerLayout的時候幾乎都是使用Slidingmenu來實現側滑效果,可以說是效果很不錯,自

    iOS開發tableView刪除的實現或者新增多個顯示按鈕

    如果想要實現簡單的刪除操作,1 + 2 + 4方法就可以實現 ,如果你要滑動出現多個操作按鈕的話,就要實現方法5了,第五個方法說白了就是集合了前幾個方法,而且可以新增多個按鈕,如果用第5個方法,1、2、4方法可以不實現 //1 - (BOOL)tableView:(UITa

    Android雙向滑動選單完全解析教你如何一分鐘實現雙向滑動特效

    記得在很早之前,我寫了一篇關於Android滑動選單的文章,其中有一個朋友在評論中留言,希望我可以幫他將這個滑動選單改成雙向滑動的方式。當時也沒想花太多時間,簡單修改了一下就發給了他,結果沒想到後來卻有一大批的朋友都來問我要這份雙向滑動選單的程式碼。由於這份程式碼寫得很不用心

    Android 3D滑動選單完全解析實現推拉門式的立體特效

    轉載地址:http://blog.csdn.net/guolin_blog/article/details/10471245 下面還是回到正題,首先來講一下這次的實現原理吧,其實傳統的滑動選單功能就是把選單部分放在了下面,主佈局放在了上面,然後根據手指滑動的距離來偏

    Android雙向滑動選單特效

    在一個Activity的佈局中需要有三部分,一個是左側選單的佈局,一個是右側選單的佈局,一個是內容佈局。左側選單居螢幕左邊緣對齊,右側選單居螢幕右邊緣對齊,然後內容佈局佔滿整個螢幕,並壓在了左側選單和右側選單的上面。當用戶手指向右滑動時,將右側選單隱藏,左側選單顯示,然後通

    AndroidAndroid開發之常用的loading等待效果實現仿微博等待動畫。兩種實現方式詳解

    長期維護的Android專案,裡面包括常用功能實現,以及知識點詳解, 當然還有Java中的知識點。 具體請看github:https://github.com/QQ986945193/DavidAndroidProjectTools 首先大家都知道,當我

    android 滑動選單SlidingMenu的實現

    首先我們看下面檢視:        這種效果大家都不陌生,網上好多都說是仿人人網的,估計人家牛逼出來的早吧,我也參考了一一些例子,實現起來有三種方法,我下面簡單介紹下: 方法一:其實就是對GestureDetector手勢的應用及佈局檔案的設計. 佈局檔案main.xml

    Android Scroller詳解實現仿QQ列表item刪除功能

    概述 Scroller,主要用於實現View的滾動。這個滾動主要是指平滑滾動 要想通過Scroller實現滑動,只要實現以下步驟即可: 建立一個Scroller物件,呼叫startScroll方法,然後呼叫invalidate()方法重新繪製View 重

    Android ListView動畫特效實現原理及源代碼

    stat 每一個 應該 所有 ner haar .get tde pri Android 動畫分三種,當中屬性動畫為我們最經常使用動畫,且能滿足項目中開發差點兒所有需求,google官方包支持3.0+。我們能夠引用三方包nineoldandr

    Android 使用ContentProvider掃描手機中的圖片仿微信顯示本地圖片效果

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    Android彈幕功能實現模仿鬥魚直播的彈幕效果

    記得之前有位朋友在我的公眾號裡問過我,像直播的那種彈幕功能該如何實現?如今直播行業確實是非常火爆啊,大大小小的公司都要涉足一下直播的領域,用鬥魚的話來講,現在就是千播之戰。而彈幕則無疑是直播功能當中最為重要的一個功能之一,那麼今天,我就帶著大家一起來實現一個簡單的Androi

    nz-tree的右鍵選單實現 以及選中狀態的實現

    ant design of angular中的nz-tree在官方例項並沒有給出和context menu的例子, 不過官方的context menu獨立的例子倒是有: https://ng.ant.design/components/drop

    Android簡訊監聽實現及Android4.4之後簡訊機制變更

    前陣子公司有一個專案,簡單的監聽簡訊應用,功能只有如下兩個: 1.監聽簡訊並獲取簡訊內容上傳伺服器; 2.從伺服器獲取簡訊內容,傳送出去    按照傳統的思路,監聽簡訊我們有兩種方式;第一種是使用廣播方式監聽簡訊廣播到來,第二種則是通過觀察者,監聽資料庫資料變化。

    Android中使用NavigationView實現抽屜效果中Menu選單欄設定

    a、在value/styles.xml中定義樣式<!--設定Menu中item的字型大小-->     <style name="WindowTitle" parent="@android:style/TextAppearance">         <item name="a