Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓按钮-点击触发定时事件_Java_Android_Events_Button - Fatal编程技术网

Java 安卓按钮-点击触发定时事件

Java 安卓按钮-点击触发定时事件,java,android,events,button,Java,Android,Events,Button,我遇到了一个(也许)小问题,我在谷歌上搜索了一下,但什么也没找到 我想要的是,当用户将手指放在按钮上时,触发一个定时按钮单击事件(例如,每秒钟一次)(而不是长时间单击事件) 基本上,我有一个按钮和一个计数器变量 cpt <- 0 User --CLICK--> Button cpt <- 1 ... // 1 second later (Button still clicked) cpt <- 2 ... // 1 second later (Button stil

我遇到了一个(也许)小问题,我在谷歌上搜索了一下,但什么也没找到

我想要的是,当用户将手指放在按钮上时,触发一个定时按钮单击事件(例如,每秒钟一次)(而不是长时间单击事件)


基本上,我有一个按钮和一个
计数器
变量

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

cpt类似的问题以前也曾被问过,下面我们来看看


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

在按钮上使用onTouchListener捕捉被触摸的时间,然后相应地处理运动。下面是一个示例,但您可以在提供的链接上阅读更多信息

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

     }
});
启动计时器更复杂。有很多方法可以做到这一点。他有一些好主意。如果您需要触发的操作数量有限,我将考虑使用<代码>汉德勒< /代码>,并为每一系列事件创建<代码>可运行的< /代码>。如果要执行的第一个操作在5秒后发生,请使用
处理程序的postDelayed方法在该时间段后调用相应的
Runnable
。通过链接对handler.postDelayed()的调用,您可以在按住按钮的时间越长的情况下启动不同的操作。要取消对action\u UP的操作,只需在处理程序上为该
可运行的
移除回调即可。示例代码在我所附的链接中

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

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

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

在所选答案中,
setOnLongClickListener
,我不希望长点击不能解决我的问题。。查看MotionEvent或TouchEvent。你可以在下一次(当手指接触屏幕时)开始计时,然后在抬起时停止计时。看起来就像我正在尝试的那样!请在回答中分享一个片段,我会接受它(如果它有效,当然^)