Android 自定义RecyclerView 水平无限轮播效果详细实例代码
下面是一个实现水平无限轮播效果的自定义RecyclerView的详细实例代码:
- 创建一个自定义的RecyclerViewAdapter类:
public class InfiniteAdapter extends RecyclerView.Adapter<InfiniteAdapter.ViewHolder> {
private List<String> data;
private LayoutInflater inflater;
public InfiniteAdapter(Context context, List<String> data) {
this.data = data;
inflater = LayoutInflater.from(context);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.item_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
int realPosition = position % data.size();
holder.textView.setText(data.get(realPosition));
}
@Override
public int getItemCount() {
// 返回一个很大的数,以实现无限轮播
return Integer.MAX_VALUE;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}
- 创建一个自定义的RecyclerViewLayoutManager类:
public class InfiniteLayoutManager extends LinearLayoutManager {
public InfiniteLayoutManager(Context context) {
super(context);
}
public InfiniteLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
// 重写smoothScrollToPosition方法,实现无限轮播效果
LinearSmoothScroller smoothScroller = new LinearSmoothScroller(recyclerView.getContext()) {
@Override
protected int getHorizontalSnapPreference() {
return SNAP_TO_START;
}
};
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
}
- 在布局文件中添加一个RecyclerView:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
- 在Activity中使用自定义的RecyclerViewAdapter和RecyclerViewLayoutManager:
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private InfiniteAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new InfiniteLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
adapter = new InfiniteAdapter(this, getData());
recyclerView.setAdapter(adapter);
}
private List<String> getData() {
List<String> data = new ArrayList<>();
data.add("Item 1");
data.add("Item 2");
data.add("Item 3");
return data;
}
}
以上代码实现了一个水平无限轮播效果的自定义RecyclerView。需要注意的是,为了实现无限轮播,Adapter的getItemCount()方法返回了一个很大的数,RecyclerViewLayoutManager的smoothScrollToPosition()方法重写了,使用了LinearSmoothScroller来实现滑动效果
原文地址: https://www.cveoy.top/t/topic/ikz0 著作权归作者所有。请勿转载和采集!