I want to use a RecyclerView
to emulate the behavior of a MultiViewPager
, in particular I'd like to have the selected item at the center of the screen, including the first and the last element.
As you can see in this image, the first item is centered and this would be my expected result.
What I did was to setup a RecyclerView
with an horizontal LinearLayoutManager
and a LinearSnapHelper
. The problem with this solution is that the first and the last item will never be horizontally centered as selection. Should I switch my code so that it uses a MultiViewPager
or is it possible to achieve a similar result taking advantage of a RecyclerView
?
You can implement this with an
RecyclerView.ItemDecoration
ingetItemOffsets()
, to offset the first and last item appropriately.You might need to use the messured size of the item and the
RecyclerView
as well. But these information is available to be used anyhow.This is probably because your RecycleView is responsible for showing, within its layout bounds, exactly the number of items that are inside of your data set.
In the example image you provided, you can achieve that effect by adding a "placeholder" item in the first and last position of your dataset. This way, you can have an invisible item taking up the first slot, thus offsetting the item you want to be centered.
This placeholder item should not respond to touch events and should not interfere with handling of click events on other items (specifically, the position handling).
You will have to modify your adapters
getItemCount
and perhapsgetItemType
.Just add padding on
RecyclerView
and addclipToPadding=false
and it'll only affect the items on the ends.