如何在 android 中的特定时间内限制或禁用 [=10=] 事件?
How to limit or disble clicks/touch events for a specific amount of time in android?
我有一个应用程序,可以在点击时为一些视图设置动画。
然而,当动画进行时,仍然有可能启动其他点击事件,这最终会导致动画出现多个问题。我需要这样做,以便在某个动画正在进行时不会启动新动画。
假设动画在屏幕上随机播放可点击的视图。我该怎么做才能让用户在 x 时间内无法启动新的点击命令,其中 x 可以是动画的持续时间,或者具有类似结果的其他一些解决方案。
在术语方面,我什至不确定我在寻找什么。我应该研究哪些领域来操纵这样的用户输入?也欢迎任何有关该主题的好资源。
您始终可以使用标志禁用点击事件,并在动画结束后再次启用它。这不是一个完美的解决方案,但在大多数情况下它都能很好地解决问题。
例如,如果您在动画中使用 Animator
,您可以这样做:
private boolean isClickEnabled = true;
...
@Override
public synchronized void onClick(View v) {
if (isClickEnabled) {
// We disable the click, which will be enabled again when the animation ends
isClickEnabled = false;
...
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// We enable the click again now that the animation has finished
isClickEnabled = true;
}
});
animator.start();
}
}
这同样适用于当您使用 Animation
class 时,但使用 AnimationListener
代替。
请注意,您可以使用 view.setClickable(true/false)
禁用和启用视图上的点击,而不是保存本地布尔值——这实际上取决于您的需要和实现,但基本思想保持不变。
如果您想在一段时间内阻止触摸,请尝试实施 Runnable 或 runonuithread,而不是您想要阻止的任何视图,请使用名为 view.setClickable(false) 的方法。
我有一个应用程序,可以在点击时为一些视图设置动画。
然而,当动画进行时,仍然有可能启动其他点击事件,这最终会导致动画出现多个问题。我需要这样做,以便在某个动画正在进行时不会启动新动画。
假设动画在屏幕上随机播放可点击的视图。我该怎么做才能让用户在 x 时间内无法启动新的点击命令,其中 x 可以是动画的持续时间,或者具有类似结果的其他一些解决方案。
在术语方面,我什至不确定我在寻找什么。我应该研究哪些领域来操纵这样的用户输入?也欢迎任何有关该主题的好资源。
您始终可以使用标志禁用点击事件,并在动画结束后再次启用它。这不是一个完美的解决方案,但在大多数情况下它都能很好地解决问题。
例如,如果您在动画中使用 Animator
,您可以这样做:
private boolean isClickEnabled = true;
...
@Override
public synchronized void onClick(View v) {
if (isClickEnabled) {
// We disable the click, which will be enabled again when the animation ends
isClickEnabled = false;
...
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
// We enable the click again now that the animation has finished
isClickEnabled = true;
}
});
animator.start();
}
}
这同样适用于当您使用 Animation
class 时,但使用 AnimationListener
代替。
请注意,您可以使用 view.setClickable(true/false)
禁用和启用视图上的点击,而不是保存本地布尔值——这实际上取决于您的需要和实现,但基本思想保持不变。
如果您想在一段时间内阻止触摸,请尝试实施 Runnable 或 runonuithread,而不是您想要阻止的任何视图,请使用名为 view.setClickable(false) 的方法。