gpt4 book ai didi

java - Android:检测按钮外的 ACTION_UP 事件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:53 25 4
gpt4 key购买 nike

我在使用自己构建的自定义按钮时遇到了一些问题。它由一个方框和下方的一条小线组成。

按钮在您按下时垂直向下动画,在您松开时再次向上动画。这是在 CustomButton.class 中处理的:

super.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
buttonContent.startAnimation(rectMoveDown);
colorDown.start();
return false;
}
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
buttonContent.startAnimation(rectMoveUp);
colorUp.start();
return false;
}
return false;
}
});

然后在应用程序的其余部分,我使用此按钮并为其设置一个点击监听器。因此我返回 false(我认为这至少是正确的)因为我不想使用该事件,而是将其传递给层次结构中的 clicklistener。

但是,当我先按下按钮,将手指移到按钮外,然后松开屏幕时,问题就出现了。然后按钮不显示在 ACTION_UP 监听器中完成的动画。

有没有人知道如何解决这个问题?

最佳答案

经过更多测试,我发现了如何解决它!

在阅读文档中的更多内容后,我发现 MotionEvent.ACTION_CANCEL完全符合我的需要:

The current gesture has been aborted. You will not receive any more points in it. You should treat this as an up event, but not perform any action that you normally would.

所以现在我的 TouchListener 看起来像这样(并且工作正常):

super.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
buttonContent.startAnimation(rectMoveDown);
colorDown.start();
return false;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
buttonContent.startAnimation(rectMoveUp);
colorUp.start();
return false;
}
return false;
}
});

不是我开始用switch-case解决了,而是为了让代码好看才改成的。如您所见,我以完全相同的方式处理 ACTION_UP 和 ACTION_CANCEL。

为了触发 OnClickListener,我到处都返回 false,如果我返回 true,它就不会触发。

关于java - Android:检测按钮外的 ACTION_UP 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31674781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com