Таймер не работает в Android при вызове invalidate()
Я хочу создать мигающий эффект, рисуя контур серым цветом, белым (в соответствии с фоном), а затем снова серым. Я хочу мигать 3 раза, показывая серый в течение 1 секунды, белый в течение 1 секунды, серый снова в течение 1 секунды и т. Д.
Когда я создал Handler
за postDelayed()
, программа пропустила run() и не выполнила его в установленное время, и перепрошивка не произошла:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
invalidate(); //calls onDraw()
Log.d(TAG, "Flashing now now");
}
}, 1000);
Как бы мне реализовать такую функцию перепрошивки с таймером и прошить его 3 раза?
Спасибо!
2 ответа
Вы можете попробовать что-то вроде этого,
int delay = 5000; // delay for 5 sec.
int period = 1000; // repeat every sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println("done}
}, delay, period);
В противном случае у вас есть много других примеров для подражания, как этот Пример 1, Пример 2, Пример 3 и т. Д. Дайте мне знать, если вам все еще нужна помощь.
Это пример рабочего кода того, как мы показываем глобус с синего на красный и обратно. Вы можете изменить код внутри, чтобы ограничить, сколько раз и сколько времени вы хотите.
protected MyGlobeFlasherHandler handlerFlashGlobe = new MyGlobeFlasherHandler(this);
@Override
protected onCreate(Bundle bundle) {
handlerFlashGlobe.sendEmptyMessageDelayed(0, 700);
}
/**
* private static handler so there are no leaked activities.
*/
protected static class MyGlobeFlasherHandler extends Handler {
private final WeakReference<HomeBase> activity;
public MyGlobeFlasherHandler(HomeBase activity) {
this.activity = new WeakReference<HomeBase>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (activity.get() != null) {
if (activity.get().shadedGlobe) {
activity.get().imgData.setImageDrawable(activity.get().getResources().getDrawable(R.drawable.globe_blue));
} else {
activity.get().imgData.setImageDrawable(activity.get().getResources().getDrawable(R.drawable.globe_red));
}
activity.get().shadedGlobe = !activity.get().shadedGlobe;
sendEmptyMessageDelayed(0, 700);
}
}
}