Вибрация от OnLongClickListener
Может быть, кто-то может объяснить мне, как правильно вибрировать от 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;
}
});
2 ответа
Когда инициируется событие щелчка, оно передается наименьшему из доступных обработчиков (если кто-то не прервал). В вашем случае событие длинного щелчка сначала передается 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;
}
Я не проверял код, но он должен быть в порядке.
Вы можете настроить таймер на период вибрации, и только по истечении времени ожидания верните True. Немного неопрятно, но это должно сработать.