Android按钮 - 点击时触发定时事件

时间:2014-03-26 13:49:46

标签: java android events button

我遇到了一个(也许)小问题,我在Google上搜索过但没有找到任何问题..

当用户将手指放在按钮上时(不是长按),我想要发出常规定时按钮点击事件(例如每秒)事件)。


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

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

谢谢!

2 个答案:

答案 0 :(得分: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 
            }
       }
     }

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

答案 1 :(得分:0)

之前已经提出类似这样的问题,请看一下this stack overflow question

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