recyclerView滑動停止後item對齊方式

2021-09-03 02:21:24 字數 1876 閱讀 1850

snaphelper是support-v7:24.2.0新增的,用於控制recyclerview滑動停止後item的對齊方式。預設提供了兩種對齊方式pagersnaphelper 與 linearsnaphelper。pagersnaphelper 和viewpage效果一樣,一次滑動一頁。linearsnaphelper這是item居中對齊。使用方式非常簡單:

pagersnaphelper mpagersnaphelper = new pagersnaphelper();

mpagersnaphelper.attachtorecyclerview(mrecyclerview);

效果如下

當然我們可以自定義snaphelper,來實現我們想要的對齊方式,下面我們來實現一下左對齊

public class mysnaphelper extends linearsnaphelper

return mverticalhelper;

}@nonnull

private orientationhelper gethorizontalhelper(@nonnull recyclerview.layoutmanager layoutmanager)

return mhorizontalhelper;

}/**

* 計算出view對齊到指定位置,所需的x、y軸上的偏移量。

*/@nullable

@override

public int calculatedistancetofinalsnap(@nonnull recyclerview.layoutmanager layoutmanager, @nonnull view targetview) else

// 垂直方向滑動時計算y方向,否則偏移為0

if (layoutmanager.canscrollvertically()) else

return out;

}private int distancetostart(recyclerview.layoutmanager layoutmanager, view targetview, orientationhelper helper) else

return helper.getdecoratedstart(targetview) - start;

}/**

* 查詢需要對齊的view

*/@nullable

@override

public view findsnapview(recyclerview.layoutmanager layoutmanager) else

}private view findstartview(recyclerview.layoutmanager layoutmanager, orientationhelper helper)

view closestchild = null;

final int start;

if (layoutmanager.getcliptopadding()) else

int absclosest = integer.max_value;

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

}return closestchild;

}/**

* 找到需要對齊的view的position,主要用於fling 操作

*/@override

// 左對齊和居中對齊一樣,無需自定義處理}}

**:

recyclerview之禁止滑動

找了好長時間查詢到乙個真正可以禁止滑動的。這個主要是記錄一下,怕下次忘了 在new linearlayoutmanager時 用下面這種方法就行了。主要的點 是第二個形參,他是判斷橫向和縱向的,下面這個就是縱向的 還有就是 方法名也是縱向的。在想橫向禁止時,剛剛說的兩個都需要換。linearlayo...

RecyclerView巢狀滑動衝突處理

在縱向recyclerview巢狀橫向recyclerview時,如果縱向recyclerview有下拉重新整理功能,那麼內部的橫向recyclerview的橫向滑動體驗會很差.只有純橫向滑動時,才能滑動內部的橫向recyclerview,否則滑動事件就會影響到下拉重新整理 新增攔截判斷.publi...

RecyclerView 滑動之後顯示資料錯亂

由於recyclerview的onbindviewholder 方法,只有在getitemviewtype 返回型別不同時才會呼叫,這點是跟listview的getview 方法不同的地方,所以如果想要每次都呼叫onbindviewholder 重新整理item資料,就要重寫getitemviewt...