Я хочу отображать 60 разных цветов за 1 секунду в android. Как я могу это сделать, чтобы продолжительность отображения (16 мс) всех цветов была одинаковой в течение 1 секунды?Достижение точного времени в android
ответ
Что вам нужно может быть достигнуто в обычае View
где вы называете invalidate()
на каждый onDraw()
вызова:
int framesToRedraw = 0;
public void startAnimation(int frames){
framesToRedraw = frames;
this.invalidate();
}
/**
* onDraw override.
* If animation is "on", view is invalidated after each redraw
* to make android redraw it on the next frame
*/
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (framesToRedraw > 0) {
// generate new color randomly
float[] hsvColor = {0, 1, 1};
hsvColor[0] = random.nextFloat() * 360f;
this.setBackgroundColor(Color.HSVToColor(hsvColor));
framesToRedraw--;
this.invalidate(); // force the view to be redrawn on each frame
}
}
@ Sasha.How onDraw() будет вызываться для каждого кадра? –
На каждом кадре андроид пересекает все дерево представлений, начиная с основного фрагмента. Если он видит недействительным представление, он вызывает его onDraw. –
Это цель 'this.invalidate()' на каждом перерисовке. Если вы аннулируете представление в конце 'onDraw()', оно будет перерисовываться на следующем кадре. –
Вы можете использовать класс Handler
для управления отложенными исполнениями. Here у вас есть пример, как использовать его для генерации таймера каждые n миллисов.
final Handler handler = new Handler();
handler.postDelayed(new Runnable(){
private static final long INTERVAL = 16L;
private long time = 0;
@Override
public void run(){
time += INTERVAL;
if(time <= 1000){
handler.postDelayed(this, INTERVAL); //Make sure you are calling it after 16 millis
}
// Change your color here
changeColor();
}
}, INTERVAL);
у вас уже есть математик, поэтому попробуйте легкий стиль
//assume im in a different Thread
for(int i=0; i < 17; i++){
Thread.sleep(16); // add try catch
Color c = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); }
довольно простого
Это просто, но не будет работать по вашему желанию. Во-первых, находясь в другом потоке, вам нужно установить цвет представления с помощью обработчика потока UI. Во-вторых, синхронизация кадров не совсем точна (пауза может быть 15, 16, 17 мс или даже больше), поэтому некоторые кадры пропускают обновления цвета. –
это петля для петли, поэтому, если это соответствует вашему желанию, вы можете запустить ее в потоке пользовательского интерфейса, или вы можете использовать asyn-задачу и использовать для обновления обновления, чтобы изменить View в вопросе, и сообщение уведомит вас, когда это будет сделано, вы можете попробуйте это и посмотрите, и если пауза действительно длинна, чем вы, вы можете спать на меньшую секунду, так что задержка может соответствовать вашей желаемой длине, но если она не подходит вам, я уверен, что другой ответы будут. @SashaSalauyou _sorry i tot вы были OP_, но спасибо за головы, я просто вызвал метод для OP, я действительно не пробовал. – Elltz
Настоятельно не рекомендуется называть поток Thread.sleep() 'в потоке пользовательского интерфейса. –
- 1. Достижение View.PostDelayed в Android Аннотации
- 2. Достижение согласованного времени отклика в GAE?
- 3. Проигрыватель AVPlayer для точного времени
- 4. Получение точного времени из интернета
- 5. Измерение точного времени выполнения в C
- 6. Зацикливание назад в течение ТОЧНОГО времени
- 7. Установка точного времени в базу данных
- 8. Продвижение Openfeint Достижение на Android
- 9. Достижение согласованности основных данных в Android
- 10. Получение точного времени выполнения инструкции MySQL
- 11. Измерение точного времени вычисления графического процессора
- 12. Получение точного времени с YouTube Analytics: оцененоMinutesWatched
- 13. получение точного времени для каждого события mousePressed
- 14. Получение точного времени выполнения на C++ (микросекундах)
- 15. Sleep() не дает точного представления времени
- 16. Таймер для точного времени по секундам
- 17. средних сигналы точного времени, сгруппированные по метке
- 18. Достижение JTextField в DocumentListener
- 19. Вычисление точного времени выполнения, а не фактического времени выполнения
- 20. Измерение точного угла поворота устройства в android
- 21. Случайное имя для точного файла в Android
- 22. Достижение многопоточности в javascript
- 23. Достижение многопоточности в PHP
- 24. Достижение предметов в JSON.
- 25. Достижение нулевого времени простоя во время развертывания кода
- 26. C++ standard lib: достижение постоянного времени удалить из связанного списка
- 27. Android Получение Точного местоположения из MyLocation Класс
- 28. Точного (азимут) направление компаса Android 3,2 таблетки
- 29. Папка ресурсов Android для точного размера экрана
- 30. сбоями во время отпирания достижение
Вы имеете в виду разные цвета для каждого кадра? –
Да, Exaccty. Я хочу отображать разные цвета для каждого кадра. –
Добавьте совет! Это не может быть «опасно» для некоторых людей? Потому что эпилептический приступ .. Я не знаю .. но poeple может быть разумным для этой быстрой смены цветов ... (I Thing) – Shudy