編輯: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多少了
這裡簡單實現了思路,在實際使用中,不同的情況還出現一些問題,需要另外找方法解決。代碼附上 (如果下載不了,請留言)
pointToPosition 通過指定的點,返回list的position
getExpandableListPosition
ExpandableListView.getPackedPositionChild
ExpandableListView.getPackedPositionGroup
通過上面的函數,可以在Expandable list和普通list中自由轉換。也就是說,在Expandable list在繪圖的時候,是先轉換成為普通的List的。明白這個道理對解決ExpandableListView的問題有幫助。
View Android所有的控件都是View或者View的子類,它其實表示的就是屏幕上的一塊矩形區域,用一個Rect來表示,left,top表示View相對於它
南丁格爾玫瑰圖 在常規圖表中實在很驚艷,但我初看沒看懂,一查原來南丁格爾這麼偉大,確實值得尊敬。 再仔細研究了下這種圖的構成,發現原來就是把柱形圖的柱形換成了扇形
一、軟鍵盤介紹 實現軟鍵盤主要用到了系統的兩個類:Keyboard和KeyboardView。 Keyboard類源碼的介紹是: Listene
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我