only run 1 animation at once

This commit is contained in:
X1nto 2021-03-20 10:36:44 +04:00
parent 16e7d1586d
commit 1c3ab835a6
1 changed files with 14 additions and 24 deletions

View File

@ -1,11 +1,11 @@
package com.vanced.manager.adapter package com.vanced.manager.adapter
import android.animation.Animator
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import androidx.core.animation.addListener
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
@ -31,24 +31,10 @@ class ExpandableAppListAdapter(
private val isRoot = prefs.managerVariant == "root" private val isRoot = prefs.managerVariant == "root"
private var isAnimationRunning = false
inner class ListViewHolder(private val binding: ViewAppExpandableBinding) : RecyclerView.ViewHolder(binding.root) { inner class ListViewHolder(private val binding: ViewAppExpandableBinding) : RecyclerView.ViewHolder(binding.root) {
private var isExpanded = false private var isExpanded = false
private var isAnimationRunning = false
private val animationListener = object : Animator.AnimatorListener {
override fun onAnimationStart(animation: Animator?) {
isAnimationRunning = true
}
override fun onAnimationEnd(animation: Animator?) {
isAnimationRunning = false
}
override fun onAnimationCancel(animation: Animator?) {}
override fun onAnimationRepeat(animation: Animator?) {}
}
fun bind(position: Int) { fun bind(position: Int) {
val dataModel = dataModels[position] val dataModel = dataModels[position]
@ -68,11 +54,11 @@ class ExpandableAppListAdapter(
when (isExpanded.also { isExpanded = !isExpanded }) { when (isExpanded.also { isExpanded = !isExpanded }) {
true -> { true -> {
appExpandedView.toggle(0f, 0.8f, -expandedTranslation) appExpandedView.toggle(0f, 0.8f, -expandedTranslation)
root.toggleCard(rootHeight - expandedViewHeight, animationListener) root.toggleCard(rootHeight - expandedViewHeight)
appExpandArrow.rotateArrow(90f) appExpandArrow.rotateArrow(90f)
} }
false -> { false -> {
root.toggleCard(rootHeight + expandedViewHeight, animationListener) root.toggleCard(rootHeight + expandedViewHeight)
appExpandedView.toggle(1f, 1f, expandedTranslation) appExpandedView.toggle(1f, 1f, expandedTranslation)
appExpandArrow.rotateArrow(-90f) appExpandArrow.rotateArrow(-90f)
} }
@ -143,10 +129,7 @@ class ExpandableAppListAdapter(
} }
} }
private fun MaterialCardView.toggleCard( private fun MaterialCardView.toggleCard(resultHeight: Int) {
resultHeight: Int,
listener: Animator.AnimatorListener
) {
ValueAnimator.ofInt(measuredHeight, resultHeight).apply { ValueAnimator.ofInt(measuredHeight, resultHeight).apply {
duration = animationDuration duration = animationDuration
addUpdateListener { value -> addUpdateListener { value ->
@ -154,7 +137,14 @@ class ExpandableAppListAdapter(
height = value.animatedValue as Int height = value.animatedValue as Int
} }
} }
addListener(listener) addListener(
onStart = {
isAnimationRunning = true
},
onEnd = {
isAnimationRunning = false
}
)
}.start() }.start()
} }