2013-03-12 62 views
0

也许有人可以解释我,如何从OnLongClickListener正确振动。在下面的方法中,振动非常短。 如果我设置return false;振动持续5000ms如预期,BUT OnClickListener被触发。从OnLongClickListener振动

我应该如何从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; 
    } 
}); 

回答

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; 
} 

我没有测试的代码,但它应该是罚款。

0

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