Android - OnTouch Do Work

时间:2011-03-27 23:17:13

标签: android touch action

我有一些代码让我非常接近我想要实现的目标。但是有一些问题。我想要做的是,当按下按钮时,它将连续调用方法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;

            }
        });

1 个答案:

答案 0 :(得分:4)

ACTION_DOWN触摸事件中,触发调用本地方法的线程。在这个方法里面不断读取一个类变量(boolean是最简单的),如果那个变量,我们称之为m_advanceLog为真,继续处理(推进你的日志,我猜)。在ACTION_UP触摸事件中,将m_advanceLog设置为false,这应该会停止循环并允许线程退出。

请记住,如果没有用户界面更改,这只是一个好主意,因此线程交互需要一些额外的工作。