Refactor animation duraton

This commit is contained in:
Koitharu
2022-07-09 10:56:37 +03:00
parent 53f127987c
commit 4743f40154
10 changed files with 67 additions and 53 deletions

View File

@@ -30,12 +30,11 @@ import com.google.android.material.color.MaterialColors
import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.shape.ShapeAppearanceModel
import com.google.android.material.snackbar.Snackbar
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.databinding.FadingSnackbarLayoutBinding
import org.koitharu.kotatsu.utils.ext.getThemeColorStateList
import com.google.android.material.R as materialR
private const val ENTER_DURATION = 300L
private const val EXIT_DURATION = 200L
private const val SHORT_DURATION_MS = 1_500L
private const val LONG_DURATION_MS = 2_750L
@@ -53,6 +52,8 @@ class FadingSnackbar @JvmOverloads constructor(
) : FrameLayout(context, attrs, defStyleAttr) {
private val binding = FadingSnackbarLayoutBinding.inflate(LayoutInflater.from(context), this)
private val enterDuration = context.resources.getInteger(R.integer.config_defaultAnimTime).toLong()
private val exitDuration = context.resources.getInteger(android.R.integer.config_shortAnimTime).toLong()
init {
binding.snackbarLayout.background = createThemedBackground()
@@ -63,7 +64,7 @@ class FadingSnackbar @JvmOverloads constructor(
animate()
.alpha(0f)
.withEndAction { visibility = GONE }
.duration = EXIT_DURATION
.duration = exitDuration
}
}
@@ -90,11 +91,11 @@ class FadingSnackbar @JvmOverloads constructor(
visibility = VISIBLE
animate()
.alpha(1f)
.duration = ENTER_DURATION
.duration = enterDuration
if (duration == Snackbar.LENGTH_INDEFINITE) {
return
}
val durationMs = ENTER_DURATION + if (duration == Snackbar.LENGTH_LONG) LONG_DURATION_MS else SHORT_DURATION_MS
val durationMs = enterDuration + if (duration == Snackbar.LENGTH_LONG) LONG_DURATION_MS else SHORT_DURATION_MS
postDelayed(durationMs) {
dismiss()
onDismiss?.invoke()

View File

@@ -49,7 +49,6 @@ import org.koitharu.kotatsu.utils.ext.*
import kotlin.math.roundToInt
private const val BUBBLE_ANIM_DURATION = 100L
private const val SCROLLBAR_ANIM_DURATION = 300L
private const val SCROLLBAR_HIDE_DELAY = 1000L
private const val TRACK_SNAP_RANGE = 5
@@ -63,6 +62,9 @@ class FastScroller : LinearLayout {
private val Size.textSize get() = resources.getDimension(textSizeId)
private val animationDuration = (context.resources.getInteger(R.integer.config_defaultAnimTime) *
context.animatorDurationScale).toLong()
private val bubbleView: TextView by lazy { findViewById(R.id.fastscroll_bubble) }
private val handleView: ImageView by lazy { findViewById(R.id.fastscroll_handle) }
private val trackView: ImageView by lazy { findViewById(R.id.fastscroll_track) }
@@ -539,14 +541,14 @@ class FastScroller : LinearLayout {
scrollbar.translationX = scrollbarPaddingEnd
scrollbar.isVisible = true
scrollbarAnimator = scrollbar.animate().translationX(0f).alpha(1f)
.setDuration(SCROLLBAR_ANIM_DURATION)
.setDuration(animationDuration)
.setListener(alphaAnimatorListener)
}
}
private fun hideScrollbar() {
scrollbarAnimator = scrollbar.animate().translationX(scrollbarPaddingEnd).alpha(0f)
.setDuration(SCROLLBAR_ANIM_DURATION)
.setDuration(animationDuration)
.setListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
super.onAnimationEnd(animation)

View File

@@ -9,6 +9,7 @@ import coil.request.ImageRequest
import coil.request.ImageResult
import coil.request.SuccessResult
import com.google.android.material.progressindicator.BaseProgressIndicator
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.network.CommonHeaders
import org.koitharu.kotatsu.utils.progress.ImageRequestIndicatorListener
@@ -41,7 +42,12 @@ fun ImageRequest.Builder.indicator(indicator: BaseProgressIndicator<*>): ImageRe
return listener(ImageRequestIndicatorListener(indicator))
}
@Suppress("SpellCheckingInspection")
fun ImageRequest.Builder.crossfade(context: Context?): ImageRequest.Builder {
val scale = context?.animatorDurationScale ?: 1f
return crossfade((300 * scale).toInt())
if (context == null) {
crossfade(true)
return this
}
val duration = context.resources.getInteger(R.integer.config_defaultAnimTime) * context.animatorDurationScale
return crossfade(duration.toInt())
}