Как довольно простой вариант:
1) Взять RecyclerView, сделать его горизонтальным:
recyclerView.setLayoutManager(new LinearLayoutManager(..., LinearLayoutManager.HORIZONTAL, ...));
2) "Зациклить" его, сделав кастомный адаптер:
class CustomAdapter extends RecyclerView.Adapter<Holder>{
private List<Item> items;
...
@Override
public void onBindViewHolder(Holder holder, int position) {
int actualPosition = position % items.size(); //Используем вместо position
}
@Override
public int getItemCount() {
return Integer.MAX_VALUE; //важно, обеспечивает "бесконечность" скролла
}
...
}
И, дополнительно, при инициализации
recyclerView.setAdapter(new CustomAdapter());
recyclerView.scrollToPosition(Integer.MAX_VALUE / 2); // тут подбираем число, чтобы нужный контент был на экране, я взял просто посередине.
Скроллить нужно для того, чтобы скролл был "бесконечный" в обе стороны.
На самом деле, скролл тут не честно бесконечный, а вполне себе конечный. Но вряд ли юзер пролистает миллиард с фигом айтемов в ту или иную сторону. Такие дела, хак придумал лично я, можно юзать.