我遇到了一个(也许)小问题,我在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
...
谢谢!
答案 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循环。