Есть ли способ избежать непрерывного ввода одного и того же кода в Android (Kotlin) - PullRequest
0 голосов
/ 04 июля 2019

Я ищу совет, можно ли здесь использовать одни и те же параметры вместо того, чтобы копировать и вставлять один и тот же код снова и снова.

Я пытаюсь перемещать блоки в приложении для визуальных эффектов,На экране есть куча блоков (imageViews), и я хочу, чтобы большинство из них совершали одни и те же движения, однако я знаю, что DRY (не повторяйся) часто учат, и я считаю, что это буквально делает это.Есть ли способ сделать это, не повторяя себя постоянно?

        var mScanner = (imageView1)
        var mAnimation = TranslateAnimation(
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.RELATIVE_TO_PARENT, 1.0f,
            TranslateAnimation.RELATIVE_TO_PARENT, -1.0f
        )
        mAnimation.setDuration(2500)
        mAnimation.setRepeatCount(-1)
        mAnimation.setRepeatMode(Animation.REVERSE)
        mAnimation.setInterpolator(LinearInterpolator())
        mScanner.setAnimation(mAnimation)

        var mScanner2 = (imageView2)
        var mAnimation2 = TranslateAnimation(
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.RELATIVE_TO_PARENT, 1.0f,
            TranslateAnimation.RELATIVE_TO_PARENT, -1.0f
        )
        mAnimation2.setDuration(2500)
        mAnimation2.setRepeatCount(-1)
        mAnimation2.setRepeatMode(Animation.REVERSE)
        mAnimation2.setInterpolator(LinearInterpolator())
        mScanner2.setAnimation(mAnimation2)

Я надеюсь, что смогу использовать один и тот же блок кода без необходимости непрерывно копировать и вставлять его для нескольких изображений.

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Вы можете использовать вспомогательную функцию для сокращения избыточного кода, также вы можете использовать функцию контекста kotlin, чтобы сделать ваш код чистым.

/**
 * Helper function for setting animation to a image view
 */
private fun setupAnimation(imageView: ImageView) {

        val animation = TranslateAnimation(
                TranslateAnimation.ABSOLUTE, 0f,
                TranslateAnimation.ABSOLUTE, 0f,
                TranslateAnimation.RELATIVE_TO_PARENT, 1.0f,
                TranslateAnimation.RELATIVE_TO_PARENT, -1.0f
        )

        animation.apply {
            duration = 2500
            repeatCount = -1
            repeatMode = Animation.REVERSE
            interpolator = LinearInterpolator()
        }
        imageView.animation = animation
    }
0 голосов
/ 04 июля 2019

Просто создайте вспомогательную функцию с такими динамическими параметрами, как этот

private fun setupAnimation(scanner: Scanner, imageView: Imageview) {
    scanner = (imageView)
    val animation = TranslateAnimation(
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.RELATIVE_TO_PARENT, 1.0f,
            TranslateAnimation.RELATIVE_TO_PARENT, -1.0f
    )
    animation.setDuration(2500)
    animation.setRepeatCount(-1)
    animation.setRepeatMode(Animation.REVERSE)
    animation.setInterpolator(LinearInterpolator())
    scanner.setAnimation(animation)
}

, и вы можете вызывать эту функцию несколько раз

...