Как сделать так: если кнопка нажата и не отпущена, действие повторяется
Подскажите, как можно так сделать. Нужно максимально просто и понятно. Пишу игру на Android Studio.
Ответы (2 шт):
Автор решения: igo
→ Ссылка
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button btn = findViewById(R.id.btn);
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN){
//нажата
}
if (motionEvent.getAction() == MotionEvent.ACTION_UP){
//отпустили
}
return true;
}
});
...
}
Автор решения: Вася Воронцов
→ Ссылка
Это работало для меня
void action() {
// Do smth
};
public void main() {
Runnable change, check;
Handler handler = new Handler();
Button button;
change = new Runnable() {
@Override
public void run() {
action();
handler.postDelayed(change, 80);
};
};
check = new Runnable() {
@Override
public void run() {
if (button.isPressed()) {
handler.post(change);
};
};
};
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
action();
handler.postDelayed(check, 600);
break;
case MotionEvent.ACTION_UP:
handler.removeCallbacksAndMessages(null);
break;
};
return false;
};
});
};
Первый Runnable (check) проверяет, нажата ли кнопка спустя 0,6 секунды. Если это так, то запускается новый Runnable (change), который делает то, что требуется (метод action()) каждые 0,08 секунды. Отпускание пальца удаляет из выполнения все Runnable. button - любая назначенная кнопка.