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

我正在尝试做一些非常简单的事情,但由于某种原因我无法让它工作。我有两个圆形按钮。

- 当我只需单击顶部(绿色)按钮时,我希望按钮切换颜色并保持这种状态。

- 如果我按住一个按钮 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;

        }

    });


弑天下
浏览 87回答 2
2回答

哆啦的时光机

尝试使用预定义的方法 -onClickListener( () => {} )单击onLongClickListener( () => {} )长时间点击这样你就不需要计算用户点击的时间,并且通过运行循环或线程你可以在长时间点击时不断改变颜色。更新正如评论中提到的,它只需要一个特定的时间使用以下算法-长按按钮启动计时器2 秒后立即应用结果** 更新**由于需要点击时间,请遵循:在按钮定义之前创建一个计时器使用长按列表器启动计时器在停止计时器的动作上,您会得到结果

长风秋雁

我找到了一个简单的解决方案来研究长按事件的工作原理。每次单击视图时,都会延迟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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java