自定義LayoutManager實現最美應用列表

2021-09-24 06:29:20 字數 1657 閱讀 4652

recyclerview的使用大家都很熟悉了,這裡偶帶大家來實現下面這種效果。

對的,你猜的不錯。這種效果只要操作layoutmanager就可以實現,然後就這樣

mrecyclerview.setlayoutmanager(new echelonlayoutmanager(getcontext()));

複製**

完了??? 對,就是so easy.

自定義layoutmanager步驟一般是:

開啟擼碼模式

必須實現的方法

@override

public recyclerview.layoutparams generatedefaultlayoutparams

() 複製**

第一次載入的時候,從這裡獲取我們需要的item的資料,同時也要把我們的item排列好,關鍵函式就是layoutchild(recycler),這個後面講,主要策略是從最後乙個item載入。

@override

public void onlayoutchildren(recyclerview.recycler recycler, recyclerview.state state)

複製**

這裡說說layoutchild(recycler)裡面做了什麼,看注釋吧,親們

private void layoutchild(recyclerview.recycler recycler) 

}if (bottomitemposition < mitemcount) else

//這裡做的是**處理

int layoutcount = layoutinfos.size();

final int startpos = bottomitemposition - (layoutcount - 1);

final int endpos = bottomitemposition;

final int childcount = getchildcount();

for (int i = childcount - 1; i >= 0; i--)

}detachandscrapattachedviews(recycler);

//這裡主要是對需要顯示的item進行排列以及縮放

for (int i = 0; i < layoutcount; i++)

}複製**

下面就是滑動的處理,如果想要recyclerview滑動的話,就要開啟這個開關。

@override

public boolean canscrollvertically

() 複製**

返回true,你就可以在豎直方向上滑動,相對的也有橫向的開關,這裡只關注豎向滑動。 滑動的處理在下面這個函式裡

@override

public int scrollverticallyby(int dy, recyclerview.recycler recycler, recyclerview.state state)

複製**

以上就是主要的邏輯,更多詳細的請移步github :

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...

自定義控制項及自定義屬性

自定義控制項在android開發中的重要性,是不言而喻,眾人皆知的。希望通過這二天的學習,能讓大家了解自定義控制項的原理,熟悉自定義控制項的使用步驟,並能寫出一些普通的效果。內容介紹 1 使用系統控制項,實現自定義的效果,案例有 優酷環形選單 廣告條 viewpager 下拉列表 spinner 2...