有什么办法可以避免在 Android(Kotlin) 中连续输入相同的代码

Is there any way to avoiding typing this same code continuously in Android(Kotlin)

我正在寻找有关是否可以在此处使用相同参数而不是一遍又一遍地复制和粘贴相同代码的建议。

我正在尝试在应用程序上移动方块以获得视觉效果。屏幕上有一堆块(图像视图),我希望它们中的大多数做出相同的动作,但是,我知道 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)

我希望能够使用相同的代码块而无需 必须为多个图像视图连续复制和粘贴它。

像这样创建一个带有动态参数的辅助函数

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)
}

而且你可以多次调用这个函数

你可以使用辅助函数来减少冗余代码,也可以使用 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
    }