diff options
Diffstat (limited to 'android/src/main')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt | 22 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt | 11 |
2 files changed, 24 insertions, 9 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 index e35f4283b2..06244067b8 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt @@ -1,10 +1,13 @@ package net.mullvad.mullvadvpn.ui.widget import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.RecyclerView.LayoutManager import android.support.v7.widget.RecyclerView.ViewHolder import kotlin.math.round class CustomItemAnimator : DefaultItemAnimator() { + var layoutManager: LayoutManager? = null + var onMove: ((Int, Int) -> Unit)? = null override fun animateMove( @@ -16,17 +19,20 @@ class CustomItemAnimator : DefaultItemAnimator() { ): 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) + if (view == layoutManager?.getChildAt(0)) { + 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()) + onMove?.invoke(deltaX.toInt(), deltaY.toInt()) - translationX -= deltaX - translationY -= deltaY + translationX -= deltaX + translationY -= deltaY + } } return true 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 ac97b4d831..3e0c4d1d70 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 @@ -2,10 +2,13 @@ package net.mullvad.mullvadvpn.ui.widget import android.content.Context import android.support.v7.widget.RecyclerView +import android.support.v7.widget.RecyclerView.LayoutManager import android.util.AttributeSet import net.mullvad.mullvadvpn.util.ListenableScrollableView class CustomRecyclerView : RecyclerView, ListenableScrollableView { + private val customItemAnimator = CustomItemAnimator() + override var horizontalScrollOffset = 0 override var verticalScrollOffset = 0 @@ -20,13 +23,19 @@ class CustomRecyclerView : RecyclerView, ListenableScrollableView { } init { - itemAnimator = CustomItemAnimator().apply { + itemAnimator = customItemAnimator.apply { onMove = { horizontalDelta, verticalDelta -> dispatchScrollEvent(horizontalDelta, verticalDelta) } } } + override fun setLayoutManager(layoutManager: LayoutManager?) { + super.setLayoutManager(layoutManager) + + customItemAnimator.layoutManager = layoutManager + } + override fun onScrolled(horizontalDelta: Int, verticalDelta: Int) { super.onScrolled(horizontalDelta, verticalDelta) |
