Является ли создание собственного класса анимации для управления анимацией хорошей практикой? - PullRequest
1 голос
/ 09 июня 2019
Android studio 3.4.1

Создание собственного класса анимации для управления анимацией

У меня есть следующий интерфейс для запуска, остановки и проверки, запущена ли анимация

interface AnimationController {
    fun start()
    fun isRunning(): Boolean
    fun stop()
}

Реализация

class AnimationControllerImp : AnimationController {

    private companion object {
        const val START_DELAY = 500L
        const val DURATION = 400L
    }

    private val animationSet by lazy {
        AnimatorSet()
    }

    override fun isRunning() = animationSet.isRunning

    override fun stop() {
        animationSet.end()
    }

    override fun start() {
        val textAnimator = ValueAnimator.ofObject(ArgbEvaluatorCompat(), 0, 1)
        textAnimator.addUpdateListener { animation ->
            /* do some animation here */
        }

        val backgroundAnimator = ValueAnimator.ofFloat(0, 1)
        backgroundAnimator.addUpdateListener { animation ->
            /* do some animation here */
        }

        animationSet.startDelay = START_DELAY
        animationSet.duration = DURATION
        animationSet.interpolator = AccelerateInterpolator()
        animationSet.playTogether(textAnimator, backgroundAnimator)
        animationSet.start()
        animationSet.addListener(object: Animator.AnimatorListener {
            override fun onAnimationRepeat(animation: Animator?) {}

            override fun onAnimationEnd(animation: Animator?) {

            }

            override fun onAnimationCancel(animation: Animator?) {

            }

            override fun onAnimationStart(animation: Animator?) {

            }    
        })
    }
}

Тогда клиент мог бы использовать этот класс следующим образом

fun startPlayTogether() {
    val animationController: AnimationController = AnimationControllerImp()
    if(animationController.isRunning) {
        animationController.stop()    
    }
    else {
        animationController.start()
    }
}

Это хороший дизайн для пользовательского класса анимации?

...