Я хотел бы периодически отображать белый прямоугольник на экране андроида; или изменить цвет фона. Например, каждые 500 мс я хочу, чтобы цвет экрана изменился с черного на белый, примерно на 200 мс, а затем обратно на черный.Как периодически отображать прямоугольник в активности андроида
Каков наилучший способ для этого? Я попытался с помощью asynctask, но получил ошибку, которую только оригинальный поток может коснуться представления. У меня есть аналогичная асинктаска, которая звучит периодически, и это работает нормально.
РЕШЕНИЕ:
С помощью ответившего я решил мою проблему путем создания двух таймеров один для черных и один для белого. Черный цвет задерживается на длительность, на которую я хочу отобразить белый экран. Оба имеют одинаковую скорость выполнения, поэтому отображается белый экран, после длительность мс отображается черный экран. Например, экран черный, но каждые две секунды мигает белым.
@Override
protected void onResume() {
super.onResume();
mBlackTimer = new Timer();
mBlackTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
view.setBackgroundColor(Color.parseColor("#000000"));
}
});
}
}, duration, (long) (1000/visionPeriod));
mWhiteTimer = new Timer();
mWhiteTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
view.setBackgroundColor(Color.parseColor("#ffffff"));
}
});
}
}, 0, (long) (1000/visionPeriod));
}
вы можете получить доступ к свойствам ui из фона, но сначала вы должны получить доступ к нити ua, вызвать getActivity(). RunOnUiThread(); если вы хотите что-то изменить и поставить логику ожидания за пределы этого потока –