В моем случае у меня может быть только максимум 2 видимых вида одновременно в обзоре переработчика, и я использую этот метод в onScrolled
, чтобы всегда иметь mostVisibleItemPosition
для воспроизведения видеоконтента при прокрутке пользователя.
Таким образом, getTop()
возвращает верхнюю позицию этого представления относительно его родителя, и когда пользователь начинает прокручивать, firstView
выходит из экрана, а firstView.getTop()
возвращает минус, в то время как secondView.getTop()
является положительным, и когда secondView
достигает вершины.почти в центре экрана, получая абсолютное значение firstView.getTop()
, мы определим, сколько пикселей firstView
top находится сверху от родительского представления сверху, и, получив secondView.getTop()
, мы определим, сколько пикселей secondView
top находится выше родительского основания, и этогде mostVisibleItemPosition
будет изменено.
private void detectMostVisibleItem() {
int firstItemPosition = layoutManager.findFirstVisibleItemPosition();
int secondItemPosition = layoutManager.findLastVisibleItemPosition();
if (firstItemPosition == secondItemPosition) {
mostVisibleItemPosition = firstItemPosition;
} else {
View firstView = layoutManager.findViewByPosition(firstItemPosition);
View secondView = layoutManager.findViewByPosition(secondItemPosition);
if (Math.abs(firstView.getTop()) <= Math.abs(secondView.getTop())) {
if (mostVisibleItemPosition != firstItemPosition) {
mostVisibleItemPosition = firstItemPosition;
...
}
} else {
if (mostVisibleItemPosition != secondItemPosition) {
mostVisibleItemPosition = secondItemPosition;
...
}
}
}
}