Как остановить цикл в android?
Привет есть код(talking_phone), он запускает цикл смены изображения, есть ещё ниже код(button_talking_phone) он должен остановить этот цикл и поставить другое изображение, но как мне остановить цикл?
talking_phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/// mediaPlayer2.start();
handler.postDelayed(new Runnable() {
@Override
public void run() {
button_talking_phone.setVisibility(View.VISIBLE);
}
}, 150);
Runnable r1 = new Runnable() {
public void run() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(R.drawable.intercepted_audio1);
}
}, 150);
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(R.drawable.intercepted_audio2);
}
}, 350);
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(R.drawable.intercepted_audio3);
}
}, 550);
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(R.drawable.intercepted_audio4);
}
}, 650);
handler.postDelayed(this, 750);
}
};
handler.postDelayed(r1, 1);
}
});
button_talking_phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
button_talking_phone.setVisibility(View.GONE);
imageView.setImageResource(R.drawable.image_main1);
}
});
Ответы (1 шт):
Для остановки цикла с нужными изображениями можно использовать метод removeCallbacks(), который удаляет все запланированные задачи из очереди для данного Handler. Соответственно, чтобы остановить цикл из метода talking_phone.setOnClickListener(), можно объявить Runnable вне метода, объявить для него переменную r1 и вызвать метод handler.removeCallbacks(r1) в методе button_talking_phone.setOnClickListener(), как показано ниже:
Runnable r1 = new Runnable() {
public void run() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(R.drawable.intercepted_audio1);
}
}, 150);
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(R.drawable.intercepted_audio2);
}
}, 350);
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(R.drawable.intercepted_audio3);
}
}, 550);
handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(R.drawable.intercepted_audio4);
}
}, 650);
handler.postDelayed(this, 750);
}};
talking_phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
handler.postDelayed(r1, 1);
handler.postDelayed(new Runnable() {
@Override
public void run() {
button_talking_phone.setVisibility(View.VISIBLE);
}
}, 150);
}
});
button_talking_phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
handler.removeCallbacks(r1);
button_talking_phone.setVisibility(View.GONE);
imageView.setImageResource(R.drawable.image_main1);
}
});
Также стоит обратить внимание на то, что при клике на button_talking_phone мы переводим его в состояние View.GONE, то есть он становится не видимым, и при следующем клике на talking_phone мы не сможем его снова видеть, если не переведем его в состояние View.VISIBLE.