mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
Added a custom snap helper in recyclerview
This commit is contained in:
parent
a3d01e1425
commit
3e9ae1bb6c
5 changed files with 72 additions and 6 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue