先放效果图
GIF.gif/**
* Xrecyleview抖音滑动效果
*/
public void initUI(XRecyclerView xRecyclerView) {
// ---RecyclerView---
xRecyclerView.setNestedScrollingEnabled(false);
// PagerSnapHelper
PagerSnapHelper snapHelper = new PagerSnapHelper() {
// 在 Adapter的 onBindViewHolder 之后执行
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
// TODO 找到对应的Index
Log.e("xiaxl: ", "---findTargetSnapPosition---");
int targetPos = super.findTargetSnapPosition(layoutManager, velocityX, velocityY);
Log.e("xiaxl: ", "targetPos: " + targetPos);
return targetPos;
}
// 在 Adapter的 onBindViewHolder 之后执行
@Nullable
@Override
public View findSnapView(RecyclerView.LayoutManager layoutManager) {
// TODO 找到对应的View
Log.e("xiaxl: ", "---findSnapView---");
View view = super.findSnapView(layoutManager);
Log.e("xiaxl: ", "tag: " + view.getTag());
return view;
}
};
snapHelper.attachToRecyclerView(xRecyclerView);
// ---布局管理器---
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
// 默认是Vertical (HORIZONTAL则为横向列表)
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
//
xRecyclerView.setLayoutManager(linearLayoutManager);
// TODO 这么写是为了获取RecycleView的宽高
xRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
xRecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
xRecyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
});
}
使用
XrecycleView recy=findviewbyid(R.id.xrecy);
initUI(recy);
网友评论