滑動吸頂實現

2021-07-23 23:12:35 字數 2396 閱讀 2389

在很多應用中,看到這樣的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 伴隨著滾動事件而滾出或滾進螢...

原生吸頂導航

滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 滾動內容,啦啦啦啦 ...