1 基于滚动条目高度固定(一般循环滚动条目都是简单的高度固定的)实例高度item24 rv 48
1 Adpater 实现数据量Int最大值
public class MainViewFliperAdapter extends RecyclerView.Adapter<MainViewFliperAdapter.MainViewFliperViewHolder> {
private List<MsgGroupBean.RowsBean> mData;
private final int showItem = 2;
public MainViewFliperAdapter(List<MsgGroupBean.RowsBean> data) {
mData = data;
}
@NonNull
@Override
public MainViewFliperViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_viewfliper, parent, false);
return new MainViewFliperViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MainViewFliperViewHolder holder, int position) {
MsgGroupBean.RowsBean rowsBean = mData.get(position % mData.size());
holder.tvContent.setText(rowsBean.vcContent);
}
@Override
public int getItemCount() {
if (mData == null || mData.size() < 3) {
return mData == null ? 0 : mData.size();
} else {
// 返回足够多的item
return Integer.MAX_VALUE;
}
}
public static class MainViewFliperViewHolder extends RecyclerView.ViewHolder {
TextView tvContent;
public MainViewFliperViewHolder(View itemView) {
super(itemView);
tvContent = itemView.findViewById(R.id.tv_content);
}
}
}
2 用一个Timer定时器实现无限循环 Rv进行一个条目间距的滚动
MainViewFliperAdapter mainViewFliperAdapter = new MainViewFliperAdapter(response.body().getRows());
rvViewfliper.setAdapter(mainViewFliperAdapter);
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (rvViewfliper != null && rvViewfliper.getAdapter() != null && rvViewfliper.getAdapter().getItemCount() > 2) {
int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
if (firstVisibleItemPosition != lastVisibleItemPosition){
View child0 = rvViewfliper.getLayoutManager().getChildAt(0);
rvViewfliper.smoothScrollBy(0, child0.getBottom());
}else {
rvViewfliper.smoothScrollBy(0, DisplayUtil.dp2px(getContext(), 26));
}
}
}
}, 1000, 2000);