检查视图是否在制作动画

时间:2019-06-06 23:46:07

标签: android kotlin

我具有扩展功能,可以使任何视图在单击时进行“缩放动画”,但是此功能不会检查视图是否处于动画状态。因此,当用户单击多次(并且视图尚未完成动画)时,视图会缩放并增加视图的原始大小...

我需要防止这种情况。也许仅在视图未设置动画时检查视图是否在设置动画和动画

fun View.setOnClickWithScaleAnimListener(block: View.() -> Unit) {
    this.setOnClickListener { v ->
        v.animate()
            .scaleXBy(0.1f)
            .scaleYBy(0.1f)
            .setDuration(80)
            .withEndAction {
                v.animate()
                    .scaleXBy(-0.1f)
                    .scaleYBy(-0.1f)
                    .duration = 80
            }

        block(this)
    }
}

3 个答案:

答案 0 :(得分:1)

您可以取消当前动画。如果没有动画正在播放,则为空操作

void mx_deref_pointer(char ******str) {
    str [0] [0] [0] [0] [0] [0] = "Follow the white rabbit!";
}

编辑:您可以在动画期间禁用视图,这样可以解决您的问题吗?

fun View.setOnClickWithScaleAnimListener(block: View.() -> Unit) {
    this.setOnClickListener { v ->
        v.animate().cancel()
        v.animate()
            .scaleXBy(0.1f)
            .scaleYBy(0.1f)
            .setDuration(80)
            .withEndAction {
                v.animate()
                    .scaleXBy(-0.1f)
                    .scaleYBy(-0.1f)
                    .duration = 80
            }

        block(this)
    }
}

答案 1 :(得分:1)

单击视图时,在动画开始之前禁用其“可单击性”。在所有动画的末尾,恢复单击视图的功能。从本质上讲,这可以在动画过程中禁用侦听器,而不必删除它。

fun View.setOnClickWithScaleAnimListener(block: View.() -> Unit) {
    this.setOnClickListener { v ->
        v.animate()
            .scaleXBy(0.1f)
            .scaleYBy(0.1f)
            .setDuration(80)
            .withStartAction { v.isClickable = false }
            .withEndAction {
                v.animate()
                    .scaleXBy(-0.1f)
                    .scaleYBy(-0.1f)
                    .setDuration(80)
                    .withEndAction { v.isClickable = true }
            }
        block(this)
    }
}   

答案 2 :(得分:0)

感谢@Cheticamp给我一个主意。 仅设置isClickable是不够的,因为如果用户快速单击多次,则视图会继续增加。 我解决了将scaleXBy替换为scaleX/scaleYscaleX/scaleYX/Y设置为X/Y的值,并且scaleXBy/scaleYByX/Y增加了{一个特定的值。

fun View.setOnClickWithScaleAnimListener(block: View.() -> Unit) {
    this.setOnClickListener { v ->
        v.animate()
            .scaleX(1.1f)
            .scaleY(1.1f)
            .setDuration(80)
            .withEndAction {
                v.animate()
                    .scaleX(1f)
                    .scaleY(1f)
                    .duration = 80
                isClickable = true

            }
            .withStartAction {
                isClickable = false
            }

        block(this)
    }
}

不需要设置isClickable,但是如果要防止用户“取消”缩放动画,则需要设置isClickable