Я совсем недавно начал использовать SnapHelper
предоставленную внутри Support Library v24
для того, чтобы иметь хороший горизонтальный RecyclerView
так же, как в Google Play Store.RecyclerView & SnapHelper -> получить щелкнул/целевой вид
Мой вопрос прост.
С помощью RecyclerView.OnScrollListener
я могу быть уведомлен, когда состояние прокрутки оседание (много как с ViewPager.OnPageChangedListener
. Это очень важно, потому что, когда свиток оседает, мне нужно, чтобы оживить вид, который будет центром как поведение по умолчанию из LinearSnapHelper
. это анимация показывает, что фокус принесен к скоро, чтобы быть центром пункта.
на данный момент, мне удалось получить мнение о том, центрирован, когда состояние прокрутки простаивает через следующая линия:
final int centered = (llm.findLastCompletelyVisibleItemPosition() - llm.findFirstCompletelyVisibleItemPosition())/2 + llm.findFirstVisibleItemPosition(); // where llm is my LinearLayoutManager
Проблема заключается в том, что запуск анимации при завершении прокрутки является странным: мне действительно нужно плавно воспроизвести анимацию по мере прокрутки прокрутки, чтобы при прокрутке прокрутки анимация завершалась.
Как вы можете видеть, мне трудно найти, какой элемент моего RecyclerView
будет одним из центров.
Вот те решения, которые я пробовал до сих пор.
Я пробовал использовать тот же расчет, когда состояние прокрутки установлено на
RecyclerView.SCROLL_STATE_SETTLING
. К сожалению, вызов методовfindVisiblePosition
из адаптера, когда прокрутка не простаивает, является плохой идеей: в зависимости от скорости прокрутки видимые элементы при вызове этих так называемых методов могут не совпадать, если прокрутка полный. В самом деле, это скажет мне, какие элементы видны во время разговора. Это делает общий смысл, но мне нужно, чтобы попытаться выяснить это ...Я попытался простирающийся
LinearSnapHelper
так, что, когдаonFling(...)
называется я могу либо использоватьfindSnapView(...)
, чтобы получить представление, что будет щелкнул или используйтеfindTargetSnapPosition(...)
, надеясь сказать, какой вид должен быть центрирован при завершении прокрутки;Я также попытался, когда состояние прокрутки
RecyclerView.SCROLL_STATE_SETTLING
, чтобы использоватьfindSnapView(...)
Из всех этих решений, ни один не прошел несколько тестов (пытаясь с разной силой красть & скорости). Некоторые исправили это несколько раз, но ошиблись в разных обстоятельствах, поэтому решение становится непригодным.
Заглянув внутрь LinearSnapHelper
, я думаю, что я начал понимать, что каким-то образом после салфетки этот класс вычисляет общие просмотры прокрутки и привязки в нескольких случаях до тех пор, пока необходимо выполнить прокрутку (количество прокрутки) поэтому зная, какой вид будет окончательный снимок зрения ... если я не ошибаюсь, потому что отрезанный не центрирован?
В любом случае, мой главный вопрос: Как я могу узнать, какой предмет моего RecyclerView
будет центрирован после салфетки, независимо от его скорости и силы?
Спасибо, но я искал способ узнать, какой элемент будет центрирован ** после ** салфетки нет, когда он поселился. – Mackovich