mihon/app/src/main/java/eu/kanade/tachiyomi/widget/RevealAnimationView.kt

77 lines
2.0 KiB
Kotlin
Raw Normal View History

2016-03-19 15:39:19 +01:00
package eu.kanade.tachiyomi.widget
import android.animation.Animator
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.view.ViewAnimationUtils
2020-07-31 16:29:32 +02:00
import androidx.core.animation.doOnEnd
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
2016-03-19 15:39:19 +01:00
class RevealAnimationView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
2020-04-25 20:24:45 +02:00
View(context, attrs) {
2016-03-19 15:39:19 +01:00
/**
* Hides the animation view with a animation
*
* @param centerX x starting point
* @param centerY y starting point
* @param initialRadius size of radius of animation
*/
fun hideRevealEffect(centerX: Int, centerY: Int, initialRadius: Int) {
// Make the view visible.
this.isVisible = true
2016-03-19 15:39:19 +01:00
// Create the animation (the final radius is zero).
val anim = ViewAnimationUtils.createCircularReveal(
this,
centerX,
centerY,
initialRadius.toFloat(),
0f
2020-04-25 20:24:45 +02:00
)
2016-03-19 15:39:19 +01:00
// Set duration of animation.
anim.duration = 500
2016-03-19 15:39:19 +01:00
// make the view invisible when the animation is done
2020-07-31 16:29:32 +02:00
anim.doOnEnd {
this@RevealAnimationView.isInvisible = true
}
2016-03-19 15:39:19 +01:00
anim.start()
2016-03-19 15:39:19 +01:00
}
/**
* Fills the animation view with a animation
*
* @param centerX x starting point
* @param centerY y starting point
* @param listener animation listener
*
* @return sdk version lower then 21
2016-03-19 15:39:19 +01:00
*/
fun showRevealEffect(centerX: Int, centerY: Int, listener: Animator.AnimatorListener): Boolean {
this.isVisible = true
2016-03-19 15:39:19 +01:00
val height = this.height
2016-03-19 15:39:19 +01:00
// Create animation
val anim = ViewAnimationUtils.createCircularReveal(
this,
centerX,
centerY,
0f,
height.toFloat()
2020-04-25 20:24:45 +02:00
)
2016-03-19 15:39:19 +01:00
// Set duration of animation
anim.duration = 350
2016-03-19 15:39:19 +01:00
anim.addListener(listener)
anim.start()
return true
2016-03-19 15:39:19 +01:00
}
}