2011-03-15 93 views
4

是否有可能通過編程強制一個視圖內滾動視圖不滾動?如何設置一個視圖不滾動與Java滾動視圖

就像聯繫人列表中的字母標題一樣。當用戶滾動名字以'A'開頭的所有聯繫人列表時,'A'欄不滾動。當用戶滾動到'A'結束時,'B'欄從ScrollView的底部向上滾動,最後在頂部重新打開'A'並停留在那裏。

我的描述很抽象,希望你能理解。

也預先感謝。

回答

3

聯繫人列表使用ListView而不是ScrollView。我認爲可以做的一個方法是在頂部有一個固定的標題。您可以根據屏幕上顯示的內容更改其內容。

將一個OnScrollListener附加到ListView。您將在onScroll中獲得第一個可見位置的視圖。然後根據視圖中的內容更改標題的內容。

您不需要在ListView中爲列表中的第一部分添加標題,因爲它已經在您的ScrollListener中處理了。保持標題行和頂部視圖的樣式相同,你會對固定標題產生幻想。

+0

我明白你的意思了:有一個固定的標題在ScrollView外部的頂部查看,以及ScrollView中的其他scolling header視圖。當滾動標題視圖到達頂部時,更改固定標題視圖的文本。 +1這個想法,但我希望有人能解決我的問題。 – 2011-03-15 07:10:53

2

我認爲您需要在ScrollView中將「靜態文本」方法與「節標題」結合使用:該列表應該包含帶有字母「A」,「B」等的禁用/不可點擊項目。節標題在視圖頂部上方滾動,將ScrollView上方的靜態TextView內容更改爲標題內容。即,當「B」標題項目滾動出視圖時,TextView現在包含「B」。

當然,棘手的部分將檢測何時「節標題」從頂部滾動,或在相反方向滾動時進入視圖。

對於獎勵積分,在內容更改時使用TextView中的「向上推動」動畫,使其看起來像列表項滾動到TextView中。 (SDK中的API演示應用程序中的「... \ view \ Animation2.java」中有一個此動畫的示例)。

更新:經過進一步審查...這裏是一些類等努力,使這項工作(這是一個很有趣的事情對我來說!)相關:

android.widget.AbsListView.OnScrollListener界面,看看如何檢測滾動事件。您需要跟蹤以前的「視圖頂部」位置,以確定您正在滾動的方向(選擇上下滑動動畫)。

我上面列出的動畫是不是真的你想要的 - 更好看android.widget.TextSwitcher類和push*.xml文件在SDK/Android的X /數據/ RES /阿尼姆目錄。

您肯定需要自己的適配器子類才能將節視圖插入列表中:getView(...)可以不同地設置行視圖的屬性(bkgnd,文本樣式等),如果該行是節標題或不是。在TextSwitcher視圖工廠中重新使用此代碼以填充列表上方的靜態TextView/Switcher。

玩得開心...!

+0

Ty和+1爲動畫提示,將考慮到這一點。 – 2011-03-15 11:15:03

2

如前所述,您需要一個ListView。對於類似於Android 4+中的人物應用的效果,我使用了這款優秀的library(自由和開源)。