我有一些代码让我非常接近我想要实现的目标。但是有一些问题。我想要做的是,当按下按钮时,它将连续调用方法AdvanceLog()。问题是,ACTION_DOWN运动事件不会继续被调用。发生的情况是,当你按住时,第一个动作是ACTION_DOWN,此后的每个动作都是ACTION_MOVE。 这引起了一些问题,因为我并不真的在寻找移动动作,更重要的是只是重复下行动作。有什么建议吗?
advanceButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
int counter=0;
if(event.getAction()==MotionEvent.ACTION_DOWN || event.getAction()==MotionEvent.ACTION_MOVE)
{
fwdTouchCounter++;
AdvanceLog(true, true);
try
{
if(fwdTouchCounter>5)
Thread.sleep(30);
else
Thread.sleep(800);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
else if(event.getAction()==MotionEvent.ACTION_UP)
fwdTouchCounter=0;
return false;
}
});
答案 0 :(得分:4)
在ACTION_DOWN
触摸事件中,触发调用本地方法的线程。在这个方法里面不断读取一个类变量(boolean
是最简单的),如果那个变量,我们称之为m_advanceLog
为真,继续处理(推进你的日志,我猜)。在ACTION_UP
触摸事件中,将m_advanceLog
设置为false,这应该会停止循环并允许线程退出。
请记住,如果没有用户界面更改,这只是一个好主意,因此线程交互需要一些额外的工作。