【问题标题】:Android button - Fire timed events on clickAndroid 按钮 - 单击时触发定时事件
【发布时间】:2014-05-04 23:22:49
【问题描述】:

我遇到了一个(可能)小问题,我在 Google 和 SO 上进行了搜索,但没有找到..

我想要的是在用户将手指放在按钮上(而不是长按事件)。


基本上,我有一个按钮和一个counter 变量。

cpt <- 0
User --CLICK--> Button
cpt <- 1
...  // 1 second later (Button still clicked)
cpt <- 2
...  // 1 second later (Button still clicked)
cpt <- 3
...

谢谢!

【问题讨论】:

  • 查看 MotionEvent 或 TouchEvent。您可以在 onDown(手指触摸屏幕时)开始计时,在抬起时停止计时。
  • 看起来像我想要做的!请在答案中分享一个sn-p,我会接受它(如果它有效,当然^^)

标签: java android events button


【解决方案1】:

在您的按钮上使用 onTouchListener 来捕捉它何时被触摸,然后相应地处理动作。下面是一个示例,但您可以在提供的链接中阅读有关 handling touch events 的更多信息

Button button = (Button) findViewById(R.id.my_button);
button.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
                //start timer here
                break;
            case MotionEvent.ACTION_UP:
                //stop timer
                break;
         }

     }
});

启动计时器更复杂。有很多方法可以做到这一点。 This post 有一些好主意。如果您需要触发的操作数量有限,我会考虑使用Handler 并为每个系列事件创建一个Runnable。如果您希望发生的第一个操作在 5 秒后发生,请使用 Handler 的 postDelayed 方法在该时间后调用适当的 Runnable。通过链接对 handler.postDelayed() 的调用,您可以在按住按钮的时间越长开始不同的操作。要取消对 ACTION_UP 的操作,只需在您的处理程序上为 Runnable 删除回调。示例代码在我附加的链接中。

其他有趣但我从未使用过的方法包括查看触摸发生的时间,然后从系统时间中减去开始时间以获得动作的长度。然而,有趣的概念是,您需要稍微修改代码以使其正常工作,因为根据我的经验,将手指放在屏幕上会不断产生触摸事件,这将使计算持续时间变得无用。

private MotionEvent touch == null;

@Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction == MotionEvent.ACTION_DOWN){
            if(touch == null)
                 touch = event;

            long duration = android.os.SystemClock.elapsedRealtime() 
            - touch.getDownTime();

            if(duration == THRESHOLD){
               //do something 
            }
       }
     }

我尚未测试该代码,但您可以看到这个想法。通过检查初始向下触摸的持续时间,您可以随着时间的推移触发不同的操作。

【讨论】:

    【解决方案2】:

    以前也有人问过类似的问题,这里看看this stack overflow question

    要创建启动和停止计时器的效果,您很可能需要某种布尔或 while 循环。

    【讨论】:

    • 在选定的答案setOnLongClickListener 中,我不想要一个不能解决我的问题的LongClick..
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 2012-12-17
    • 2021-03-02
    • 2015-10-18
    • 2020-02-20
    • 2017-10-14
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多