如何在动画进行过程中停止事件?

时间:2018-12-19 06:42:33

标签: android android-animation android-event

我正在为视图的动画制作动画,在其中对View的平移和缩放进行动画处理。

问题:

如果我的动画持续时间为2000毫秒(2秒),我不希望任何用户事件在动画之间进行干扰。

例如,如果双击“视图触发器”的“缩放动画”和滚动触发器的“平移动画”。两个动画持续时间均为2秒,但是如果我双击并滚动一个又一个,则会产生奇怪的结果。

所以我想在动画进行时停止事件的发生。

是否有任何简单的解决方案,而无需保持OnGoing动画的状态并覆盖onTouchEvent以禁用事件?

2 个答案:

答案 0 :(得分:1)

从事件中锁定用户界面:

private void lockUI() {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);   
}

解锁界面:

private void unlockUI() {
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}

答案 1 :(得分:0)

我使用的解决方案:

  • 创建了State的动画

     private var isAnimationOnGoing: Boolean = false
    
  • 在动画监听器中设置State

    translationAnimation.setAnimationListener(object : Animation.AnimationListener {
        override fun onAnimationRepeat(animation: Animation?) {
        }
    
        override fun onAnimationEnd(animation: Animation?) {
            isAnimationOnGoing = false
        }
    
        override fun onAnimationStart(animation: Animation?) {
            isAnimationOnGoing = true
        }
    })
    
  • 使用dispatchTouchEvent(ev: MotionEvent?)。以防止ViewGroup或ViewGroup的子级收到事件

    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
        val dispatchTouchEvent = super.dispatchTouchEvent(ev)
        if (isAnimationOnGoing) {
            return false
        }
        return dispatchTouchEvent
      }