按下设置按钮并在Android中继续执行相同的任务

时间:2014-06-17 07:53:51

标签: android button

我正在做我的小项目。我只想在我的APP中设置4个按钮,按下按钮,我应该继续做同样的事情直到我松开按钮。 (例如,我需要使用这4个按钮来控制我的机器的方向。)

我一直在尝试几种不同的方法,例如onTouch。但是,在这个方法中,我需要保持稍微移动我的手指,以便我可以继续做同样的事情。否则,它会停止。也适用于onlongClicklistener和setpressed为true。他们都没有我想要的东西。

有谁能告诉我我可以调用哪些方法或实现这个的逻辑?非常感谢! :)

2 个答案:

答案 0 :(得分:2)

你可以在点击监听器上设置正常,并在里面启动一个线程,计时器,后台任务或其他会定期检查你的按钮是否被按下的东西。

例如,你可以这样做:

final Button yourButton = (Button) view.findViewById(R.id.your_button);
long timerInterval = 1000; //one second
yourButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        final Timer t = new Timer();
        t.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                if (yourButton.isPressed()) {
                    // do something (executing your code on button being pressed)
                } else {
                    t.cancel();
                }
            }
        }, 0, timerInterval);
    }
});

这将按下按钮每秒执行你的代码

重要提示:这提供了一般性的想法,请记住,匿名TimerTask类将保留对yourButton实例的强引用,该实例可能会泄漏。您应该使用your_button引用,这将被"垃圾收集"如果View被销毁,并且在TimerTask内,您应该检查yourButton是否null

答案 1 :(得分:1)

我认为onTouchListerner最适合您的要求。使用线程来完成工作。在事件ACTION_DOWN上启动线程并在事件ACTION_UP上停止线程。

((Button) findViewById(R.id.leftBtn)).setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN){
                // start the thread
                return true;
            } else if(event.getAction() == MotionEvent.ACTION_UP){
                // stop the thread
                return true;
            }
            return false;

        }
    });

希望这会对你有所帮助。