我正在为视图的动画制作动画,在其中对View的平移和缩放进行动画处理。
问题:
如果我的动画持续时间为2000毫秒(2秒),我不希望任何用户事件在动画之间进行干扰。
例如,如果双击“视图触发器”的“缩放动画”和滚动触发器的“平移动画”。两个动画持续时间均为2秒,但是如果我双击并滚动一个又一个,则会产生奇怪的结果。
所以我想在动画进行时停止事件的发生。
是否有任何简单的解决方案,而无需保持OnGoing动画的状态并覆盖onTouchEvent以禁用事件?
答案 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
}