mirror of
https://github.com/CappielloAntonio/tempo.git
synced 2026-01-31 06:42:06 +00:00
Added a custom snap helper in recyclerview
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
package com.cappielloantonio.play.helper.recyclerview;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearSnapHelper;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
public class CustomLinearSnapHelper extends LinearSnapHelper {
|
||||
@Override
|
||||
public View findSnapView(RecyclerView.LayoutManager layoutManager) {
|
||||
if (layoutManager instanceof LinearLayoutManager) {
|
||||
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
|
||||
if (!needToDoSnap(linearLayoutManager)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return super.findSnapView(layoutManager);
|
||||
}
|
||||
|
||||
public boolean needToDoSnap(LinearLayoutManager linearLayoutManager) {
|
||||
return linearLayoutManager.findFirstCompletelyVisibleItemPosition() != 0 && linearLayoutManager.findLastCompletelyVisibleItemPosition() != linearLayoutManager.getItemCount() - 1;
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ import com.cappielloantonio.play.adapter.ArtistSimilarAdapter;
|
||||
import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
||||
import com.cappielloantonio.play.databinding.FragmentArtistPageBinding;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper;
|
||||
import com.cappielloantonio.play.interfaces.MediaCallback;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.ArtistRepository;
|
||||
@@ -177,6 +178,9 @@ public class ArtistPageFragment extends Fragment {
|
||||
if (bind != null) bind.artistPageAlbumsSector.setVisibility(!albums.isEmpty() ? View.VISIBLE : View.GONE);
|
||||
albumArtistPageOrSimilarAdapter.setItems(albums);
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper albumSnapHelper = new CustomLinearSnapHelper();
|
||||
albumSnapHelper.attachToRecyclerView(bind.albumsRecyclerView);
|
||||
}
|
||||
|
||||
private void initSimilarArtistsView() {
|
||||
@@ -189,5 +193,8 @@ public class ArtistPageFragment extends Fragment {
|
||||
if (bind != null) bind.similarArtistSector.setVisibility(!artist.getSimilarArtists().isEmpty() ? View.VISIBLE : View.GONE);
|
||||
artistSimilarAdapter.setItems(artist.getSimilarArtists());
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper similarArtistSnapHelper = new CustomLinearSnapHelper();
|
||||
similarArtistSnapHelper.attachToRecyclerView(bind.similarArtistsRecyclerView);
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,9 @@ import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearSnapHelper;
|
||||
import androidx.recyclerview.widget.PagerSnapHelper;
|
||||
import androidx.recyclerview.widget.SnapHelper;
|
||||
import androidx.viewpager2.widget.ViewPager2;
|
||||
|
||||
import com.cappielloantonio.play.R;
|
||||
@@ -24,6 +26,7 @@ import com.cappielloantonio.play.adapter.RecentMusicAdapter;
|
||||
import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
||||
import com.cappielloantonio.play.adapter.YearAdapter;
|
||||
import com.cappielloantonio.play.databinding.FragmentHomeBinding;
|
||||
import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper;
|
||||
import com.cappielloantonio.play.model.Album;
|
||||
import com.cappielloantonio.play.model.Artist;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
@@ -165,6 +168,9 @@ public class HomeFragment extends Fragment {
|
||||
|
||||
mostPlayedAlbumAdapter.setItems(albums);
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper mostPlayedAlbumSnapHelper = new CustomLinearSnapHelper();
|
||||
mostPlayedAlbumSnapHelper.attachToRecyclerView(bind.mostPlayedAlbumsRecyclerView);
|
||||
}
|
||||
|
||||
private void initRecentPlayedAlbumView() {
|
||||
@@ -179,6 +185,9 @@ public class HomeFragment extends Fragment {
|
||||
|
||||
recentlyPlayedAlbumAdapter.setItems(albums);
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper recentPlayedAlbumSnapHelper = new CustomLinearSnapHelper();
|
||||
recentPlayedAlbumSnapHelper.attachToRecyclerView(bind.recentlyPlayedAlbumsRecyclerView);
|
||||
}
|
||||
|
||||
private void initYearSongView() {
|
||||
@@ -199,6 +208,9 @@ public class HomeFragment extends Fragment {
|
||||
|
||||
yearAdapter.setItems(years);
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper yearSnapHelper = new CustomLinearSnapHelper();
|
||||
yearSnapHelper.attachToRecyclerView(bind.yearsRecyclerView);
|
||||
}
|
||||
|
||||
private void initStarredTracksView() {
|
||||
@@ -214,8 +226,8 @@ public class HomeFragment extends Fragment {
|
||||
starredSongAdapter.setItems(songs);
|
||||
});
|
||||
|
||||
PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
|
||||
pagerSnapHelper.attachToRecyclerView(bind.starredTracksRecyclerView);
|
||||
SnapHelper starredTrackSnapHelper = new PagerSnapHelper();
|
||||
starredTrackSnapHelper.attachToRecyclerView(bind.starredTracksRecyclerView);
|
||||
}
|
||||
|
||||
private void initStarredAlbumsView() {
|
||||
@@ -231,8 +243,8 @@ public class HomeFragment extends Fragment {
|
||||
starredAlbumAdapter.setItems(albums);
|
||||
});
|
||||
|
||||
PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
|
||||
pagerSnapHelper.attachToRecyclerView(bind.starredAlbumsRecyclerView);
|
||||
SnapHelper starredAlbumSnapHelper = new PagerSnapHelper();
|
||||
starredAlbumSnapHelper.attachToRecyclerView(bind.starredAlbumsRecyclerView);
|
||||
}
|
||||
|
||||
private void initStarredArtistsView() {
|
||||
@@ -248,8 +260,8 @@ public class HomeFragment extends Fragment {
|
||||
starredArtistAdapter.setItems(artists);
|
||||
});
|
||||
|
||||
PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
|
||||
pagerSnapHelper.attachToRecyclerView(bind.starredArtistsRecyclerView);
|
||||
SnapHelper starredArtistSnapHelper = new PagerSnapHelper();
|
||||
starredArtistSnapHelper.attachToRecyclerView(bind.starredArtistsRecyclerView);
|
||||
}
|
||||
|
||||
private void initRecentAddedAlbumView() {
|
||||
@@ -261,6 +273,9 @@ public class HomeFragment extends Fragment {
|
||||
homeViewModel.getMostRecentlyAddedAlbums().observe(requireActivity(), albums -> {
|
||||
recentlyAddedAlbumAdapter.setItems(albums);
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper recentAddedAlbumSnapHelper = new CustomLinearSnapHelper();
|
||||
recentAddedAlbumSnapHelper.attachToRecyclerView(bind.recentlyAddedAlbumsRecyclerView);
|
||||
}
|
||||
|
||||
private void initDownloadedSongView() {
|
||||
@@ -275,6 +290,9 @@ public class HomeFragment extends Fragment {
|
||||
|
||||
dowanloadedMusicAdapter.setItems(MappingUtil.mapDownload(downloads));
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper downloadedSongSnapHelper = new CustomLinearSnapHelper();
|
||||
downloadedSongSnapHelper.attachToRecyclerView(bind.downloadedTracksRecyclerView);
|
||||
}
|
||||
|
||||
private void setDiscoverSongSlideViewOffset(float pageOffset, float pageMargin) {
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.cappielloantonio.play.adapter.ArtistAdapter;
|
||||
import com.cappielloantonio.play.adapter.GenreAdapter;
|
||||
import com.cappielloantonio.play.adapter.PlaylistAdapter;
|
||||
import com.cappielloantonio.play.databinding.FragmentLibraryBinding;
|
||||
import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.viewmodel.LibraryViewModel;
|
||||
@@ -90,6 +91,9 @@ public class LibraryFragment extends Fragment {
|
||||
bind.libraryAlbumSector.setVisibility(!albums.isEmpty() ? View.VISIBLE : View.GONE);
|
||||
albumAdapter.setItems(albums);
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper albumSnapHelper = new CustomLinearSnapHelper();
|
||||
albumSnapHelper.attachToRecyclerView(bind.albumRecyclerView);
|
||||
}
|
||||
|
||||
private void initArtistView() {
|
||||
@@ -103,6 +107,9 @@ public class LibraryFragment extends Fragment {
|
||||
bind.libraryArtistSector.setVisibility(!artists.isEmpty() ? View.VISIBLE : View.GONE);
|
||||
artistAdapter.setItems(artists);
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper artistSnapHelper = new CustomLinearSnapHelper();
|
||||
artistSnapHelper.attachToRecyclerView(bind.artistRecyclerView);
|
||||
}
|
||||
|
||||
private void initGenreView() {
|
||||
@@ -122,6 +129,9 @@ public class LibraryFragment extends Fragment {
|
||||
bind.libraryGenresSector.setVisibility(!genres.isEmpty() ? View.VISIBLE : View.GONE);
|
||||
genreAdapter.setItems(genres);
|
||||
});
|
||||
|
||||
CustomLinearSnapHelper genreSnapHelper = new CustomLinearSnapHelper();
|
||||
genreSnapHelper.attachToRecyclerView(bind.genreRecyclerView);
|
||||
}
|
||||
|
||||
private void initPlaylistSlideView() {
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.cappielloantonio.play.adapter.AlbumAdapter;
|
||||
import com.cappielloantonio.play.adapter.ArtistAdapter;
|
||||
import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
||||
import com.cappielloantonio.play.databinding.FragmentSearchBinding;
|
||||
import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.SearchViewModel;
|
||||
@@ -82,12 +83,18 @@ public class SearchFragment extends Fragment {
|
||||
albumAdapter = new AlbumAdapter(requireContext());
|
||||
bind.searchResultAlbumRecyclerView.setAdapter(albumAdapter);
|
||||
|
||||
CustomLinearSnapHelper albumSnapHelper = new CustomLinearSnapHelper();
|
||||
albumSnapHelper.attachToRecyclerView(bind.searchResultAlbumRecyclerView);
|
||||
|
||||
// Artists
|
||||
bind.searchResultArtistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||
bind.searchResultArtistRecyclerView.setHasFixedSize(true);
|
||||
|
||||
artistAdapter = new ArtistAdapter(requireContext());
|
||||
bind.searchResultArtistRecyclerView.setAdapter(artistAdapter);
|
||||
|
||||
CustomLinearSnapHelper artistSnapHelper = new CustomLinearSnapHelper();
|
||||
artistSnapHelper.attachToRecyclerView(bind.searchResultArtistRecyclerView);
|
||||
}
|
||||
|
||||
private void initSearchView() {
|
||||
|
||||
Reference in New Issue
Block a user