为了账号安全,请及时绑定邮箱和手机立即绑定

检查按钮是否按住一段时间或是否只是单击 ANDROID

检查按钮是否按住一段时间或是否只是单击 ANDROID

弑天下 2022-12-28 16:52:34
我正在尝试做一些非常简单的事情,但由于某种原因我无法让它工作。我有两个圆形按钮。- 当我只需单击顶部(绿色)按钮时,我希望按钮切换颜色并保持这种状态。- 如果我按住一个按钮 2 秒钟,我希望只要我按住按钮,颜色就会交换,但一旦我松开,就会恢复到原来的颜色。我正在尝试使用 OnClickListener。我在两种情况下使用开关:MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_UP。(见下面的代码)为了获得按钮被按住的持续时间,我在 while 循环中使用 System.currentTimeMillis() (当按钮被按住时)-->(如果 timeElapsed > 2000){切换颜色}完整代码如下: greenbutton.setOnTouchListener(new View.OnTouchListener() {        @Override        public boolean onTouch(View view, MotionEvent motionEvent) {            switch (motionEvent.getAction()) {                case MotionEvent.ACTION_DOWN:                    startTime = System.currentTimeMillis();                    while (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {                        currentTime = System.currentTimeMillis();                        elapsedTime = currentTime - startTime;                        if (elapsedTime > 500) {                            if (switched) {                                revertButtons();                                return true;                            } else {                                switchButtons();                                return true;                            }                        }                    }                case MotionEvent.ACTION_UP:                    if (switched) {                        revertButtons();                        elapsedTime = 0;                        currentTime = 0;                        startTime = 0;                        return true;                    } else {                        switchButtons();                        elapsedTime = 0;                        currentTime = 0;                        startTime = 0;                        return true;                    }            }            return false;        }    });
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

尝试使用预定义的方法 -

  1. onClickListener( () => {} )单击

  2. onLongClickListener( () => {} )长时间点击

这样你就不需要计算用户点击的时间,并且通过运行循环或线程你可以在长时间点击时不断改变颜色。

更新

正如评论中提到的,它只需要一个特定的时间使用以下算法-

  1. 长按按钮启动计时器

  2. 2 秒后立即应用结果

** 更新**

由于需要点击时间,请遵循:

  1. 在按钮定义之前创建一个计时器

  2. 使用长按列表器启动计时器

  3. 在停止计时器的动作上,您会得到结果


查看完整回答
反对 回复 2022-12-28
?
长风秋雁

TA贡献1757条经验 获得超7个赞

我找到了一个简单的解决方案来研究长按事件的工作原理。每次单击视图时,都会延迟Runnable将类型CheckForLongPress添加到队列中。如果延迟结束,OnLongClickListener则调用。如果在延迟结束之前有不同的事件,则将CheckForLongPress Runnable其从队列中移除。


我只是覆盖postDelayed(Runnable action, long delayMillis)视图的公共方法来更改操作系统延迟


@Override public boolean postDelayed(Runnable action, long delayMillis) {

    boolean isLongPress = action.getClass().getSimpleName().equals("CheckForLongPress");

    return super.postDelayed(action, isLongPress ? LONG_PRESS_MILLIS : delayMillis);

}

我设置LONG_PRESS_MILLIS为 100,它正在工作!


希望能帮助到你!!!;)


图片来源: MArtinCR


查看完整回答
反对 回复 2022-12-28
  • 2 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信