Cleanup media rail crossfade animation.

main
clark-signal 2023-01-11 09:28:20 -05:00 zatwierdzone przez Alex Hart
rodzic 6120902ff5
commit 9e903a023f
2 zmienionych plików z 25 dodań i 11 usunięć

Wyświetl plik

@ -310,26 +310,32 @@ class MediaPreviewV2Fragment : LoggingFragment(R.layout.fragment_media_preview_v
private fun bindAlbumRail(albumThumbnailMedia: List<Media>, currentItem: MediaTable.MediaRecord) { private fun bindAlbumRail(albumThumbnailMedia: List<Media>, currentItem: MediaTable.MediaRecord) {
val albumRail: RecyclerView = binding.mediaPreviewPlaybackControls.recyclerView val albumRail: RecyclerView = binding.mediaPreviewPlaybackControls.recyclerView
if (albumThumbnailMedia.size > 1) { if (albumThumbnailMedia.size > 1) {
if (albumRail.visibility == GONE) { val firstRailDisplay = albumRail.visibility == GONE
if (firstRailDisplay) {
albumRail.visibility = View.INVISIBLE albumRail.visibility = View.INVISIBLE
albumRail.alpha = 0f
} }
val railItems = albumThumbnailMedia.map { MediaRailAdapter.MediaRailItem(it, it.uri == currentItem.attachment?.uri) } val railItems = albumThumbnailMedia.map { MediaRailAdapter.MediaRailItem(it, it.uri == currentItem.attachment?.uri) }
albumRailAdapter.submitList(railItems) { albumRail.post { scrollAlbumRailToCurrentAdapterPosition() } } albumRailAdapter.submitList(railItems) { albumRail.post { scrollAlbumRailToCurrentAdapterPosition(!firstRailDisplay) } }
} else { } else {
albumRail.visibility = View.GONE albumRail.visibility = View.GONE
albumRailAdapter.submitList(emptyList()) albumRailAdapter.submitList(emptyList())
} }
} }
private fun scrollAlbumRailToCurrentAdapterPosition() { private fun scrollAlbumRailToCurrentAdapterPosition(smooth: Boolean = true) {
val currentItemPosition = albumRailAdapter.findSelectedItemPosition() val currentItemPosition = albumRailAdapter.findSelectedItemPosition()
val albumRail: RecyclerView = binding.mediaPreviewPlaybackControls.recyclerView val albumRail: RecyclerView = binding.mediaPreviewPlaybackControls.recyclerView
albumRail.scrollToPosition(currentItemPosition)
val offsetFromStart = (albumRail.width - individualItemWidth) / 2 val offsetFromStart = (albumRail.width - individualItemWidth) / 2
val smoothScroller = OffsetSmoothScroller(requireContext(), offsetFromStart) val smoothScroller = OffsetSmoothScroller(requireContext(), offsetFromStart)
smoothScroller.targetPosition = currentItemPosition smoothScroller.targetPosition = currentItemPosition
val layoutManager = albumRail.layoutManager as LinearLayoutManager val layoutManager = albumRail.layoutManager as LinearLayoutManager
layoutManager.startSmoothScroll(smoothScroller) if (smooth) {
layoutManager.scrollToPosition(currentItemPosition)
layoutManager.startSmoothScroll(smoothScroller)
} else {
layoutManager.scrollToPositionWithOffset(currentItemPosition, offsetFromStart)
}
} }
private fun crossfadeViewIn(view: View, duration: Long = 200): Boolean { private fun crossfadeViewIn(view: View, duration: Long = 200): Boolean {

Wyświetl plik

@ -49,17 +49,25 @@
</LinearLayout> </LinearLayout>
<androidx.recyclerview.widget.RecyclerView <FrameLayout
android:id="@+id/media_preview_album_rail"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:animateLayoutChanges="false"
android:layout_marginStart="12dp" android:layout_marginStart="12dp"
android:layout_marginEnd="12dp" android:layout_marginEnd="12dp"
android:layout_marginBottom="11dp" android:layout_marginBottom="11dp"
android:orientation="horizontal" android:layout_gravity="center">
android:visibility="gone"
tools:layout_height="64dp" /> <androidx.recyclerview.widget.RecyclerView
android:id="@+id/media_preview_album_rail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone"
tools:layout_height="64dp" />
</FrameLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"