Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android系統聯系人全特效實現(上),分組導航和擠壓動畫

Android系統聯系人全特效實現(上),分組導航和擠壓動畫

編輯:Android開發教程

記得在我剛接觸Android的時候對系統聯系人中的特效很感興趣,它會根據手機中聯系人姓氏的首字母進 行分組,並在界面的最頂端始終顯示一個當前的分組。如下圖所示:

最讓我感興趣 的是,當後一個分組和前一個分組相碰時,會產生一個上頂的擠壓動畫。那個時候我思考了各種方法想去實 現這種特效,可是限於功夫不到家,都未能成功。如今兩年多過去了,自己也成長了很多,再回頭去想想這 個功能,突然發現已經有了思路,於是立刻記錄下來與大家分享。

首先講一下需要提前了解的知識點 ,這裡我們最需要用到的就是SectionIndexer,它能夠有效地幫助我們對分組進行控制。由於 SectionIndexer是一個接口,你可以自定義一個子類來實現SectionIndexer,不過自己再寫一個 SectionIndexer的實現太麻煩了,這裡我們直接使用Android提供好的實現AlphabetIndexer,用它來實現聯 系人分組功能已經足夠了。

AlphabetIndexer的構造函數需要傳入三個參數,第一個參數是cursor,第二 個參數是sortedColumnIndex整型,第三個參數是alphabet字符串。其中cursor就是把我們從數據庫中查出的 游標傳進去,sortedColumnIndex就是指明我們是使用哪一列進行排序的,而alphabet則是指定字母表排序規 則,比如:"ABCDEFGHIJKLMNOPQRSTUVWXYZ"。有了AlphabetIndexer,我們就可以通過它的 getPositionForSection和getSectionForPosition方法,找出當前位置所在的分組,和當前分組所在的位置 ,從而實現類似於系統聯系人的分組導航和擠壓動畫效果,關於AlphabetIndexer更詳細的詳解,請參考官方 文檔。

那麼我們應該怎樣對聯系人進行排序呢?前面也提到過,有一個sortedColumnIndex參數,這個 sortedColumn到底在哪裡呢?我們來看一下系統聯系人的raw_contacts這張表 (/data/data/com.android.providers.contacts/databases/contacts2.db),這個表結構比較復雜,裡面有 二十多個列,其中有一列名叫sort_key,這就是我們要找的了!如下圖所示:

可以看到,這 一列非常人性化地幫我們記錄了漢字所對應的拼音,這樣我們就可以通過這一列的值輕松為聯系人進行排序 了。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved