diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-10-23 10:43:08 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-10-23 10:43:08 -0300 |
| commit | c843c69863f89d01923dce546148724daab8bb89 (patch) | |
| tree | 5d621fa1d47c33b46a54e2e673f50b4cc9d933f3 | |
| parent | 64f6c93f0c6a19647e8b656cdfa4126da3563ac0 (diff) | |
| parent | 844b9a932a4d782a302b2f021011c990e695223d (diff) | |
| download | mullvadvpn-c843c69863f89d01923dce546148724daab8bb89.tar.xz mullvadvpn-c843c69863f89d01923dce546148724daab8bb89.zip | |
Merge branch 'fix-recycler-view-scroll-events'
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt | 37 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt | 12 |
2 files changed, 49 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt new file mode 100644 index 0000000000..e35f4283b2 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt @@ -0,0 +1,37 @@ +package net.mullvad.mullvadvpn.ui.widget + +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.RecyclerView.ViewHolder +import kotlin.math.round + +class CustomItemAnimator : DefaultItemAnimator() { + var onMove: ((Int, Int) -> Unit)? = null + + override fun animateMove( + holder: ViewHolder, + fromX: Int, + fromY: Int, + toX: Int, + toY: Int + ): Boolean { + if (super.animateMove(holder, fromX, fromY, toX, toY)) { + var view = holder.itemView + var translationX = view.translationX + var translationY = view.translationY + + view.animate().setUpdateListener { _ -> + val deltaX = round(translationX - view.translationX) + val deltaY = round(translationY - view.translationY) + + onMove?.invoke(deltaX.toInt(), deltaY.toInt()) + + translationX -= deltaX + translationY -= deltaY + } + + return true + } else { + return false + } + } +} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt index 710bb834d0..ac97b4d831 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt @@ -19,9 +19,21 @@ class CustomRecyclerView : RecyclerView, ListenableScrollableView { super(context, attributes, defaultStyleAttribute) { } + init { + itemAnimator = CustomItemAnimator().apply { + onMove = { horizontalDelta, verticalDelta -> + dispatchScrollEvent(horizontalDelta, verticalDelta) + } + } + } + override fun onScrolled(horizontalDelta: Int, verticalDelta: Int) { super.onScrolled(horizontalDelta, verticalDelta) + dispatchScrollEvent(horizontalDelta, verticalDelta) + } + + private fun dispatchScrollEvent(horizontalDelta: Int, verticalDelta: Int) { val oldHorizontalScrollOffset = horizontalScrollOffset val oldVerticalScrollOffset = verticalScrollOffset |
