Для решения вашей задачи надо
1) Проверить условие видимости + ниже/выше
решается с помощью методов
int findFirstVisibleItemPosition();
int findLastVisibleItemPosition();
или
int findLastCompletelyVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
2) Сделать элемент самым верхним/нижним
решается с помощью метода
scrollToPositionWithOffset(int, int)