mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
Add backpress animation to full screen cover popup
This commit is contained in:
parent
7733c46ffc
commit
d58c623862
1 changed files with 40 additions and 4 deletions
|
@ -1,6 +1,7 @@
|
||||||
package eu.kanade.tachiyomi.ui.manga
|
package eu.kanade.tachiyomi.ui.manga
|
||||||
|
|
||||||
import android.animation.AnimatorSet
|
import android.animation.AnimatorSet
|
||||||
|
import android.animation.ObjectAnimator
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
@ -16,7 +17,9 @@ import android.os.PowerManager
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
|
import androidx.activity.BackEventCompat
|
||||||
import androidx.activity.ComponentDialog
|
import androidx.activity.ComponentDialog
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.activity.addCallback
|
import androidx.activity.addCallback
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.core.animation.addListener
|
import androidx.core.animation.addListener
|
||||||
|
@ -37,6 +40,7 @@ import eu.kanade.tachiyomi.util.system.powerManager
|
||||||
import eu.kanade.tachiyomi.util.system.rootWindowInsetsCompat
|
import eu.kanade.tachiyomi.util.system.rootWindowInsetsCompat
|
||||||
import eu.kanade.tachiyomi.util.view.animateBlur
|
import eu.kanade.tachiyomi.util.view.animateBlur
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
|
import kotlin.math.min
|
||||||
|
|
||||||
class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable, private val thumbView: View) :
|
class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable, private val thumbView: View) :
|
||||||
ComponentDialog(controller.activity!!, R.style.FullCoverDialogTheme) {
|
ComponentDialog(controller.activity!!, R.style.FullCoverDialogTheme) {
|
||||||
|
@ -80,11 +84,38 @@ class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable
|
||||||
ContextCompat.registerReceiver(context, powerSaverChangeReceiver, filter, ContextCompat.RECEIVER_NOT_EXPORTED)
|
ContextCompat.registerReceiver(context, powerSaverChangeReceiver, filter, ContextCompat.RECEIVER_NOT_EXPORTED)
|
||||||
}
|
}
|
||||||
|
|
||||||
onBackPressedDispatcher.addCallback {
|
val backPressedCallback = object : OnBackPressedCallback(enabled = true) {
|
||||||
if (binding.mangaCoverFull.isClickable) {
|
var startX = 0f
|
||||||
animateBack()
|
var startY = 0f
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
|
if (binding.mangaCoverFull.isClickable) {
|
||||||
|
animateBack()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun handleOnBackStarted(backEvent: BackEventCompat) {
|
||||||
|
startX = backEvent.touchX
|
||||||
|
startY = backEvent.touchY
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun handleOnBackProgressed(backEvent: BackEventCompat) {
|
||||||
|
val maxProgress = min(backEvent.progress, 0.4f)
|
||||||
|
binding.mangaCoverFull.scaleX = 1f - maxProgress * 0.6f
|
||||||
|
binding.mangaCoverFull.translationX =
|
||||||
|
maxProgress * 100f * (if (backEvent.swipeEdge == BackEventCompat.EDGE_LEFT) 1 else -1)
|
||||||
|
binding.mangaCoverFull.translationY =
|
||||||
|
-maxProgress * 150f
|
||||||
|
binding.mangaCoverFull.scaleY = 1f - maxProgress * 0.6f
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun handleOnBackCancelled() {
|
||||||
|
binding.mangaCoverFull.scaleX = 1f
|
||||||
|
binding.mangaCoverFull.translationX = 0f
|
||||||
|
binding.mangaCoverFull.translationY = 0f
|
||||||
|
binding.mangaCoverFull.scaleY = 1f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onBackPressedDispatcher.addCallback(backPressedCallback)
|
||||||
|
|
||||||
binding.touchOutside.setOnClickListener {
|
binding.touchOutside.setOnClickListener {
|
||||||
onBackPressedDispatcher.onBackPressed()
|
onBackPressedDispatcher.onBackPressed()
|
||||||
|
@ -273,7 +304,12 @@ class FullCoverDialog(val controller: MangaDetailsController, drawable: Drawable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
playTogether(radiusAnimator, dimAnimator, saveAnimator)
|
val objectAnimator = ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, expandedImageView.scaleX, 1f)
|
||||||
|
val objectAnimator1 = ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, expandedImageView.scaleY, 1f)
|
||||||
|
val objectAnimator2 = ObjectAnimator.ofFloat(expandedImageView, View.TRANSLATION_X, expandedImageView.translationX, 0f)
|
||||||
|
val objectAnimator3 = ObjectAnimator.ofFloat(expandedImageView, View.TRANSLATION_Y, expandedImageView.translationY, 0f)
|
||||||
|
|
||||||
|
playTogether(radiusAnimator, dimAnimator, saveAnimator, objectAnimator, objectAnimator1, objectAnimator2, objectAnimator3)
|
||||||
|
|
||||||
addListener(
|
addListener(
|
||||||
onEnd = {
|
onEnd = {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue