Как получить правильное расстояние прокрутки RecyclerView при использовании StaggeredGridLayoutManager?

Я создал представление заголовка, создав и ViewHolder уникальный ViewHolder в RecyclerView из-за специального вида вида. Заголовок полностью пуст, но он полный, и его высота очень хорошо рассчитана для следующих анимаций, когда пользователь прокручивает RecyclerView :

  • TextView переместится из центра заголовка в Toolbar и, наконец, «станет» его названием. Во время процесса TextView будет уменьшаться в соответствии с вертикальным смещением.
  • Другой TextView будет перемещаться вместе с первым TextView одновременно, но он не будет сокращаться. Вместо этого он изменит альфу и, наконец, станет прозрачным, когда первый TextView находится в правильном положении на Toolbar .

Чтобы реализовать их, мне нужно получить расстояние прокрутки RecyclerView чтобы я мог вычислять перевод или альфа.

Вот что я сделал сейчас:

 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { private int totalDy = 0; @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { totalDy -= dy; // setAlpha, setTranslationY and setScale here according to totalDy. } }); 

Он отлично работает, когда набор данных не изменяется. Однако, когда я прокручиваю вниз, вставляю / notifyItemInserted/Removed() любые элементы в / из адаптера и notifyItemInserted/Removed() , totalDy не будет точным. Например, когда я удалил элемент, totalDy больше не вернется 0.

В результате кажется, что использование totalDy для получения прокрутки RadyclerView не будет работать хорошо. Есть ли способы для разработчиков получить его?

УВЕДОМЛЕНИЕ. Я использую StaggeredGridLayoutManager и я чувствую, что он отличается от LinearLayoutManager .