Нужен следующий метод, с параметром position (или сам item) для RecyclerView (LinearLayoutManager):
1) Если элемент списка виден на экране, то ничего не делать.
2) Если элемент ниже «видимого окна» списка, то прокрутить список так, чтобы элемент был виден самым нижним
3) Если элемент выше «видимого окна» списка, то прокрутить список так, чтобы элемент был виден самым верхним
Для решения вашей задачи надо
1) Проверить условие видимости + ниже/выше
решается с помощью методов
int findFirstVisibleItemPosition();
int findLastVisibleItemPosition();
или
int findLastCompletelyVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
2) Сделать элемент самым верхним/нижним
решается с помощью метода
scrollToPositionWithOffset(int, int)
Отмечаю решением. Хотя у меня проблема была в другом — почему-то в проекте RecyclerView находится внутри NestedScrollView и поэтому scrollToPositionWithOffset не работает.