在很多應用中,看到這樣的listview:listview滑動過程中分組標題固定在上方,當第二個組滑上來時,第乙個組才跟著上滑,下乙個組固定,直到該組也滑出上邊緣。世上無難事只怕有心人,在github上就有人做出來了,而且效果很好(後來發現安卓自帶應用中聯絡人應用就是這樣的,估計github的作者也是仿照著聯絡人做出來的吧)。
先看截圖:
pinnedsectionlistview繼承自listview,眾所周知listview的每個子view都是按順序跟著滾動的,要實現聯絡人listview的效果還真的找不到思路。看了pinnedsectionlistview之後,感覺要改造乙個現有的控制項,一般都是通過重繪子view來實現的。viewgroup(listview繼承自它)重繪子view的方法是dispatchdraw。
看看pinnedsectionlistview在dispatchdraw中有那些特別的處理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@override
protected void dispatchdraw(canvas canvas)
canvas.restore();
}
}
關鍵在於canvas.translate(pleft, ptop + mtranslatey);
意思是在繪製mpinnedsection
的時候,listview滑動了多長的距離,就將canvas移動多少的距離,使mpinnedsection
始終在可見的範圍內固定不變。
使用方法:
1.在xml布局檔案中將listview替換成pinnedsectionlistview
1
2
3
4
5
android:id=
"@android:id/list"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
2.讓你的listadapter繼承pinnedsectionlistadapter
介面,最簡單的做法是只增加isitemviewtypepinned
方法,該方法必須在item為pinned的情況下返回true。
1
2
3
4
5
6
7
8
9
// our adapter class implements 'pinnedsectionlistadapter' inte***ce
class mypinnedsectionlistadapter extends baseadapter implements pinnedsectionlistadapter
}
最後推薦乙個demo:
CSS實現滑動吸頂功能
首先先上效果圖,來篩選需要學習的同伴 驅逐,大佬退散!接下來就是我們的核心實現了 item id沒錯,就是這麼兩行css 一行js 都不需要,開心不開心!接下來就是打擊你們的時候到了,讓我們看看瀏覽器對這個特性的相容性 需要考慮瀏覽器相容性的就要慎重考慮這個實現方案了。檢視特性相容性 caniuse...
Android 吸頂停留
其中要注意的是viewpager中的設定 和banner所在的布局的設定 將enteralways刪掉就可以了 以下學習自 詳細說一下layout scrollflags中 scroll 和 scroll enteralways的區別 scroll child view 伴隨著滾動事件而滾出或滾進螢...
原生吸頂導航
滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 ...