2012-05-03 4 views
-1

Я хочу, чтобы я рисовал, но медленно. Я пишу этот код, чтобы нарисовать линию в методе ondraw.Как я могу замедлить работу в андроиде?

. 
. 
. 
. 
caneta.setARGB(255, 255, 0,0);caneta.setStrokeWidth(10); 
canvas.drawLine(0, ys * 1/2, this.getWidth(), ys * 1/2, caneta); 
. 
. 
. 

как я это сделал медленно?

+0

Вам нужно какой-то фоновый поток, чтобы сделать это. Вы ничего не увидите (помимо всплывающего окна ANR), если вы делаете это медленно внутри 'onDraw', так как экран обновляется только после возвращения' onDraw'. – zapl

+0

, так что я могу сделать –

ответ

1

Это почти как gameloop работы:

-invalidate ваш холст когда-либо X миллисекунд (используя цикл и Thread.sleep())

-increment ваш X/Y Coords после каждого цикла

-Handle новые Coords в OnDraw() снова

Пример:

private int x1, x2; 
    private int y1, y2; 
    private View v; 

    public void start() 
    { 
     for (int i = 0; i <= 250; i++) 
     { 
      v.invalidate(); 

      x2 += 1; 

      try 
      { 
       Thread.sleep(50); 
      } 
      catch (InterruptedException e) 
      { 
      } 
     } 
    } 

в существующем классе зрения, где у вас уже есть свой метод OnDraw

protected void onDraw(Canvas canvas) 
     { 
     //draw your line here using your X and Y member 
       canvas.drawLine(x1, y1, x2, y2, caneta); 
     } 
+0

ı попробуйте это сейчас спасибо –

+0

, когда ı используйте thread.sleep, он не рисует. İ дождитесь окончания и нарисуем сразу же в конце петли –

+0

не забудьте украсть свой холст и снова и снова рисовать! Это как: «петля, ничья, новые коорды, недействительность, сон ... цикл снова, снова нарисовать, новые коорды, снова признать недействительными, снова спать ...» ... – Thkru

0

В каждом вызове метода onDraw нарисовать часть строки поэтапно, в зависимости от требуемой скорости. Например, если вы хотите медленный рисунок, увеличьте размер, скажем, на 5 пикселей в каждом вызове, пока не будет достигнута полная линия.

private float linePercent = 0; 
protected void onDraw (Canvas canvas){ 

    float lineX = this.getWidth() * linePercent; 
    canvas.drawLine(0, ys * 1/2, lineX, ys * 1/2, caneta); 
    linePercent += 0.05f; 
    if(linePercent >= 1){ 
     linePercent = 0; 
    } 
} 

И в фоновом потоке, запланировать invalidate на ваш взгляд.

+0

? Попробуйте это сейчас, спасибо –

+0

нет, он не работает. он сразу рисует –

+0

вы можете попробовать меньшее приращение - скажем, 1 пиксель или даже меньше (используя значение поплавка)? – Rajesh

Смежные вопросы