From 95df9239915ee466ffe6148e2b5f2c1e836c4282 Mon Sep 17 00:00:00 2001 From: Alex Yermolenko Date: Thu, 2 Nov 2023 15:12:38 +0200 Subject: [PATCH] Preloader support for StaggeredGridLayputManager --- .../RecyclerToListViewScrollListener.java | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/integration/recyclerview/src/main/java/com/bumptech/glide/integration/recyclerview/RecyclerToListViewScrollListener.java b/integration/recyclerview/src/main/java/com/bumptech/glide/integration/recyclerview/RecyclerToListViewScrollListener.java index 8039d677ad..68abf3392a 100644 --- a/integration/recyclerview/src/main/java/com/bumptech/glide/integration/recyclerview/RecyclerToListViewScrollListener.java +++ b/integration/recyclerview/src/main/java/com/bumptech/glide/integration/recyclerview/RecyclerToListViewScrollListener.java @@ -1,10 +1,12 @@ -package com.bumptech.glide.integration.recyclerview; +package com.leia.holopix.util.glide; import android.widget.AbsListView; import android.widget.ListView; + import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; /** * Converts {@link androidx.recyclerview.widget.RecyclerView.OnScrollListener} events to {@link @@ -47,11 +49,33 @@ public void onScrollStateChanged(RecyclerView recyclerView, int newState) { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); - - int firstVisible = layoutManager.findFirstVisibleItemPosition(); - int visibleCount = Math.abs(firstVisible - layoutManager.findLastVisibleItemPosition()); int itemCount = recyclerView.getAdapter().getItemCount(); + int firstVisible = RecyclerView.NO_POSITION; + int visibleCount = 0; + + RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); + + if (layoutManager instanceof LinearLayoutManager) { + LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager; + + firstVisible = linearLayoutManager.findFirstVisibleItemPosition(); + visibleCount = Math.abs(firstVisible - linearLayoutManager.findLastVisibleItemPosition()); + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager; + + int[] firstVisiblePositions = staggeredGridLayoutManager.findFirstVisibleItemPositions(null); + + if (firstVisiblePositions.length > 0) { + firstVisible = firstVisiblePositions[0]; + + int[] lastVisiblePositions = staggeredGridLayoutManager.findLastVisibleItemPositions(null); + + if (lastVisiblePositions.length > 0) { + int lastVisible = lastVisiblePositions[0]; + visibleCount = Math.abs(firstVisible - lastVisible); + } + } + } if (firstVisible != lastFirstVisible || visibleCount != lastVisibleCount @@ -62,4 +86,4 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { lastItemCount = itemCount; } } -} +} \ No newline at end of file