2010-07-26 4 views
0

Я не могу показать прямоугольники после некоторой задержки кода. Вот что я делаюThread.sleep in Canvas

DashPathEffect dashPath = new DashPathEffect (new float [] {1,0}, 1);

 paint.setPathEffect(dashPath); 
     paint.setStrokeWidth(300); 
     final int size =300; 

canvas.drawLine (0, размер, 100, размер, краска);

попытка {

  Thread.sleep(4000, 0); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

canvas.drawLine (110, размер, 200, размер, краска);


Я не могу заметить задержку между этими двумя прямоугольниками на мобильном экране. Оба появляются одновременно. Все, что я пытаюсь сделать, это рисовать прямоугольники один за другим с некоторой задержкой между ними. Скорее всего, этот код ожидает 4 секунды, а затем отображает оба прямоугольника в одно и то же время. Спасибо.

ответ

1

Вы никогда не должны спать в потоке пользовательского интерфейса. Как вы видели, это заставляет всю программу запираться и ждать завершения сна.

Вместо этого в этом случае вы можете изучить использование обработчика. См. timed ui-updates для полного описания того, как это сделать.

+0

Следует сказать, что на самом деле это совет Google, чтобы спать на событиях движения касания (всего 20 мс или около того), чтобы справиться с определенными проблемами с тем, насколько дорогими событиями касания могут быть. Связанный поток от разработчиков google group: http://groups.google.com/group/android-developers/browse_thread/thread/39eea4d7f6e6dfca/b50e9be8f47db505?q&pli=1 – Maximus

+0

Хорошо, 99,9% времени, если вы действительно не знаете, что вы делаете и хорошо объясняете это, спать в потоке пользовательского интерфейса - плохая идея. –

+0

Да ... Согласен :) – Maximus