use custom rewind/fast forward button with animations

This commit is contained in:
2020-11-16 19:23:06 +01:00
parent fd099e97e6
commit 6ce263832b
12 changed files with 215 additions and 17 deletions

View File

@ -212,8 +212,8 @@ class PlayerActivity : AppCompatActivity() {
private fun initActions() {
exo_close_player.setOnClickListener { this.finish() }
exo_rew_10.setOnClickListener { rewind() }
exo_ffwd_10.setOnClickListener { forward() }
rwd_10.setOnButtonClickListener { rewind() }
ffwd_10.setOnButtonClickListener { forward() }
button_next_ep.setOnClickListener { playNextEpisode() }
}

View File

@ -0,0 +1,64 @@
package org.mosad.teapod.ui.components
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ObjectAnimator
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.FrameLayout
import kotlinx.android.synthetic.main.button_fast_forward.view.*
import org.mosad.teapod.R
class FastForwardButton(context: Context, attrs: AttributeSet): FrameLayout(context, attrs) {
private val animationDuration: Long = 800
init {
inflate(context, R.layout.button_fast_forward, this)
}
fun setOnButtonClickListener(func: FastForwardButton.() -> Unit) {
imageButton.setOnClickListener {
func()
runOnClickAnimation()
}
}
fun runOnClickAnimation() {
// run button animation
ObjectAnimator.ofFloat(imageButton, View.ROTATION, 0f, 50f).apply {
duration = animationDuration / 4
repeatCount = 1
repeatMode = ObjectAnimator.REVERSE
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
imageButton.isEnabled = false // disable button
imageButton.setImageResource(R.drawable.ic_baseline_forward_24)
}
override fun onAnimationEnd(animation: Animator?) {
imageButton.isEnabled = true // enable button
}
})
start()
}
// run lbl animation
textView.visibility = View.VISIBLE
ObjectAnimator.ofFloat(textView, View.TRANSLATION_X, 35f).apply {
duration = animationDuration
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
imageButton.isEnabled = true // enable button
imageButton.setImageResource(R.drawable.ic_baseline_forward_10_24)
textView.visibility = View.GONE
textView.animate().translationX(0f)
}
})
start()
}
}
}

View File

@ -0,0 +1,64 @@
package org.mosad.teapod.ui.components
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ObjectAnimator
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.FrameLayout
import kotlinx.android.synthetic.main.button_rewind.view.*
import org.mosad.teapod.R
class RewindButton(context: Context, attrs: AttributeSet): FrameLayout(context, attrs) {
private val animationDuration: Long = 800
init {
inflate(context, R.layout.button_rewind, this)
}
fun setOnButtonClickListener(func: RewindButton.() -> Unit) {
imageButton.setOnClickListener {
func()
runOnClickAnimation()
}
}
fun runOnClickAnimation() {
// run button animation
ObjectAnimator.ofFloat(imageButton, View.ROTATION, 0f, -50f).apply {
duration = animationDuration / 4
repeatCount = 1
repeatMode = ObjectAnimator.REVERSE
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
imageButton.isEnabled = false // disable button
imageButton.setImageResource(R.drawable.ic_baseline_rewind_24)
}
override fun onAnimationEnd(animation: Animator?) {
imageButton.isEnabled = true // enable button
}
})
start()
}
// run lbl animation
textView.visibility = View.VISIBLE
ObjectAnimator.ofFloat(textView, View.TRANSLATION_X, -35f).apply {
duration = animationDuration
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
imageButton.isEnabled = true // enable button
imageButton.setImageResource(R.drawable.ic_baseline_rewind_10_24)
textView.visibility = View.GONE
textView.animate().translationX(0f)
}
})
start()
}
}
}