Вибрация от 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. Немного неопрятно, но это должно сработать.

Другие вопросы по тегам