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...