Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android 類iphone的Expandable List View

Android 類iphone的Expandable List View

編輯:Android開發實例

 最近看到一些應用實現了iphone一樣的Expandable ListView。如QQ for pad。本文探索和實現了相關的效果,一並附上源代碼。歡迎實現和提交建議。

  先看看實現的效果圖:     

 

  • 布局設計

  開始我采用的是一般的拖曳方面來做,也就是通過WindowManage創建一個頂層的窗口,然後實時更新這個窗口。但是仔細分析一下,發現這樣做有些弊端:首先,如果Expandable List如果可以拖曳的話,再要跟這個top window進行同步就不好處理了。其次,拖曳的處理方面需要獲得被拖曳對象的緩存圖片,而本文設計的情況在從下往上滑的時候有可能處理的對象還沒有畫處理,這樣就無從有緩存圖片了。

  好吧,不必把事情想得這麼復雜,要什麼高級的拖曳手段來實現。簡單點,看下面的布局: 

 1 <RelativeLayout android:layout_width="match_parent"
2 android:id="@+id/relativeLayout1" android:layout_height="0dp"
3 android:layout_weight="10">
4 <ExpandableListView android:layout_height="wrap_content"
5 android:layout_width="match_parent" android:id="@+id/expandableListView"
6 android:layout_alignParentTop="true" android:layout_alignLeft="@+id/linearLayout1"></ExpandableListView>
7 <LinearLayout android:layout_height="wrap_content"
8 android:layout_width="match_parent" android:id="@+id/topGroup"
9 android:orientation="vertical" android:layout_alignParentTop="true"
10 android:layout_alignParentLeft="true"
11 android:background="@drawable/group_bg"></LinearLayout>
12 </RelativeLayout>

  用一個RelativeLayout把兩個布局重疊在一起,LinearLayout覆蓋在ExpandableList上面。效果看總體效果圖圖 

 

  

  •  獲取滑動的狀態和位置

  下面要解決的一個問題是,這Indicator Group位置是可變的,當本分組快要顯示完得時候,有一個上移的過程。所以要及時的更新它的位置。研究完ExpandableListView的API,我決定使用listView.setOnScrollListener(this);通過監聽這個事件,可以及時更新位置

 

  • 算法的邏輯

  List view的(0,0)點所在的group的內容顯示在Indicator Group上

  Indicator Group的bottom不能超過,所在分組的bottom,換句話說,不能覆蓋到下一個分組的top線。計算方法是獲得(0,indicatorGroupHeight)所在的Group,如果和Indicator Group不同一個分組,就獲得它的top位置,也就是圖中的A點。這就可以計算出來Indicator 應該向上margin多少了

 

  • 總結

  這裡簡單實現了思路,在實際使用中,不同的情況還出現一些問題,需要另外找方法解決。代碼附上 (如果下載不了,請留言)

 

  • 重要的API:

  pointToPosition 通過指定的點,返回list的position

  getExpandableListPosition

  ExpandableListView.getPackedPositionChild

   ExpandableListView.getPackedPositionGroup

  通過上面的函數,可以在Expandable list和普通list中自由轉換。也就是說,在Expandable list在繪圖的時候,是先轉換成為普通的List的。明白這個道理對解決ExpandableListView的問題有幫助。

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