В настоящее время я работаю над приложением android для регулировки мест. Одна из особенностей, которую я хочу включить, состоит в том, чтобы заставить сиденье двигаться быстрее, когда кнопка для перемещения сиденья в одном направлении коснется в течение определенного времени.Android-Button Timer (Handler - RemoveCallback не остановит PostDelayed)
С этой целью я хочу начать следующим образом: когда я касаюсь кнопки (в моем коде «seat_down»), приложение должно отправить сигнал «1». Через некоторое время (в моем коде пять секунд), касаясь кнопки (и только когда она по-прежнему коснется после этих пяти секунд), приложение должно отправить сигнал «0». Таким образом, если я касаюсь кнопки всего лишь четыре секунды, а затем отпустите, приложение должно только послать сигнал «1», а не «0» после этого.
Вы можете увидеть код внизу.
Что действительно делает мое приложение?
Прикосновение к кнопке более пяти секунд, приложение работает так, как я хочу. Поэтому он посылает в момент касания кнопки сигнал «1» и через пять секунд «0». Ницца!
Когда я касаюсь кнопки в течение более короткого момента, чем пять секунд, он также отправляет «1» в начале и через пять секунд «0». : ((
)Как-то «myHandler.removeCallbacks (MyRunnable)» не работает, когда я больше не прикасаюсь к кнопке, но приложение отправляет сообщение «2», когда я отпускаю кнопку, таким образом, она распознает «MotionEvent.ACTION_UP». Когда я пишу «myHandler.removeCallbacks (MyRunnable)» в другой позиции моего кода, например строку перед «return true», она отлично прекращает работу с postDelayed. К сожалению, она останавливает postDelayed все время, даже если я все еще касаюсь кнопки.
Я также попытался сделать таймер со стандартными циклами java и много раз искал в Интернете, но я не мог найти то, что действительно решает моя проблема. Я знаю, что есть «OnLongClickListener», но промежуток времени до тех пор, пока он не активируется слишком короткий. Я также читал о методе Timer и AsyncTask, но я надеялся справиться с этим без этого.
Буду очень признателен, если вы могли бы помочь мне с этим! Спасибо!!!
КОД
seat_down = (ImageButton) findViewById(R.id.arrow_down);
seat_down.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Handler myHandler = new Handler();
final Runnable MyRunnable = new Runnable() {
@Override
public void run() {
String message2 = "0";
sendMessage(message2);
}
};
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
String message1 = "1";
sendMessage(message1);
myHandler.postDelayed(MyRunnable, 5000);
break;
case MotionEvent.ACTION_UP:
myHandler.removeCallbacks(MyRunnable);
break;
}
return true;
}});
Я скопировал мой Handler унд Runnable из onResume в OnCreate. Там говорится, что myHandler и MyRunnable не используются. В моем методе onResume seat_down сказано, что myHandler не может быть разрешен, и MyRunnable не может быть разрешен переменной. Ваше второе предложение, которое я действительно не понял. Я попытался включить его в onCreate («мертвый код»), а также в метод onResume seat_down («myHandler не может быть разрешен переменной»). – user3256557
@ user3256557, проверьте мое обновление. Вы должны создать свой обработчик и Runnable вне вашего OnTouchListener. – ElDuderino
Теперь это работает! Большое спасибо за Вашу помощь!!! – user3256557