也许有人能给我解释一下,如何正确地从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;
}
});
发布于 2013-03-12 23:03:53
当一个click事件被触发时,它被传递到可用的最低级别的处理程序(除非有人中断)。在本例中,首先将一个长单击事件传递给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-12 22:52:02
您可以将计时器设置为在振动周期内运行,并且仅当它超时时才返回True。有点笨拙,但应该能行得通。
https://stackoverflow.com/questions/15364153
复制相似问题