使用触摸按钮上的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
}
}
}
我还没有测试该代码,但你可以看到这个想法。通过检查初始向下触摸的持续时间,您可以随着时间的推移启动不同的操作。
看看MotionEvent或TouchEvent。你可以开始时间onDown(当手指触摸屏幕时),并提起时停止它。 – Rarw
看起来像我想要做的!请分享一个答案片段,我会接受它(如果它的工作,当然^^) – Val