0

也许有人可以向我解释,如何正确地从 OnLongClickListener 中振动。在下面的方法中,振动很短。如果我return false;按预期设置振动持续 5000 毫秒,但OnClickListener会被解雇。

我应该如何在整个期间从 OnLongClickListener 振动,而不是开火OnClickListener

final Vibrator x = (Vibrator) getParent()
            .getSystemService(Context.VIBRATOR_SERVICE);
button.setOnLongClickListener(new OnLongClickListener() {
        @Override
    public boolean onLongClick(View v) {
        x.vibrate(5000);
        return true;
    } 
}); 
4

2 回答 2

0

您可以设置一个计时器在振动期间运行,并且只有在超时后才返回 True。有点笨拙,但它应该工作。

于 2013-03-12T14:52:01.757 回答
0

当点击事件被触发时,它被传递给可用的最低处理程序(除非有人中断)。在您的情况下,首先将长点击事件传递给OnLongClickListener. 如果该侦听器返回true,它基本上宣布此单击事件已被处理。如果它返回false,则它宣布 click 事件没有被它处理,这就是为什么事件会沿着更高级别传递给层次结构中它上面的处理程序,在你的情况下,OnClickListener.

这就是为什么返回false不是要走的路,因为你确实想处理长点击事件。

如何ASyncTask为振动本身创建一个后台线程或一个。就像是:

@Override
public boolean onLongClick(View v) {
    getHandler().post(new Runnable() {

        @Override
        public void run() {
            x.vibrate(5000);           
        }

    });
    return true;
} 

我没有测试代码,但应该没问题。

于 2013-03-12T15:03:53.210 回答