2014-03-26 215 views
0

消防定时事件我坚持了(也许)一点问题,我搜索在谷歌和SO但没有发现..Android的按钮 - 点击上

我想什么是火定期定时按钮单击事件(例如每秒),当用户将他的手指放在按钮上时(不是长按事件)。


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

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

谢谢!

+1

看看MotionEvent或TouchEvent。你可以开始时间onDown(当手指触摸屏幕时),并提起时停止它。 – Rarw

+0

看起来像我想要做的!请分享一个答案片段,我会接受它(如果它的工作,当然^^) – Val

回答

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 
      } 
     } 
    } 

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

+0

答复接受,谢谢! – Val

0

像这样类似的问题已经被问过,这里就来看看this stack overflow question

要创建启动和停止,你将最有可能需要某种形式的布尔或while循环的计时器的作用。

+0

在选定的答案,'setOnLongClickListener',我不想要一个'LongClick'应该不能解决我的问题.. – Val