2013-01-06 103 views
0

我需要在畫布上循環繪製一個圓圈,並在每次迭代之間延遲。所以,我意識到這是使用Thread.sleep方法延遲的一個線索。如何將canvas作爲參數發送給處理程序?

這裏是我onDraw方法:

protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     super.onDraw(canvas); 

     if (touching) { 
      paint.setStrokeWidth(STROKE_WIDTH); 
      paint.setColor(_color); 
      paint.setStyle(Paint.Style.FILL); 
      Thread background = new Thread(new Runnable() { 

       public void run() { 
        // TODO Auto-generated method stub 
        try { 

         while (f<=75){ 
          Thread.sleep(100); 
          drawHandler.sendMessage(drawHandler.obtainMessage()); 
         } 

        } 
        catch (InterruptedException e) { 
         // TODO: handle exception 
         Log.e("ERROR", "Thread Interrupted"); 
        } 
       } 
      }); 

      background.start(); 


     } 

這裏是我的處理程序:

private Handler drawHandler = new Handler() { 
    public void handleMessage (Message msg) { 
     canvas.drawCircle(x, y, f, paint); 
    } 
}; 

此代碼不能編譯,因爲帆布不能在處理程序來解決。如何發送處理程序中的畫布對象?一般來說,如何在處理程序中發送參數?

回答

3

您可以簡單地使用message.object來傳遞畫布。 但這不是繪畫的方式。

你的處理程序應該把你的視圖置於一個給定的狀態並且調用invalidate,然後在onDraw中檢查這個狀態並相應地繪製你的圓。這將適合Android繪圖循環更優雅。

相關問題