2014-12-05 43 views
0

我想在TextureView中繪製越來越多的圓圈。所有圈子的中心都是一樣的。然後我嘗試增加繪製的Circle直到達到特定的限制。然後我想清除畫布並重新開始。然而,使用我的代碼(見下文),畫布似乎永遠不會被清除。實際上它應該被清除時很快閃爍白色,但是當下一個循環中的第一個圓圈被繪製(試圖清除畫布後)時,所有先前的圓圈都會重新出現,並且整個動畫似乎都會變得瘋狂。讓它運行幾秒鐘後,我留下了幾十個圈(有些重疊),而不是每個週期只有大約4個。此外,他們沒有我給他們的半徑(基本上我的代碼最終繪製了大量隨機大小的圓圈)。花了好幾天嘗試不同的事情,但似乎沒有任何幫助。如何清除紋理視圖中的畫布(繪製增加的圓圈後)

這裏是我的代碼:

paint.setColor(Color.argb(opac, 177, 177, 177)); 
      stroke = 5; 
      paint.setStrokeWidth(stroke); 
      radius = 10; 
      Canvas canvas = new Canvas(); 
      Boolean clear = false; 
     //Added these two lines following advice from a previous answer: 
     Paint clearPaint = new Paint(); 
     clearPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 

     while (mRunning && !Thread.interrupted()) { 

      canvas = mSurface.lockCanvas(null); 
      try { 
       if(clear){ 
        canvas.drawPaint(clearPaint); //This line should clear the canvas. 
        clear = false; 
       }else{      
        canvas.drawCircle(circleX, circleY, radius, paint); 
       } 
      } finally { 
       mSurface.unlockCanvasAndPost(canvas); 
      } 
      if(radius+15 <= circleY-stroke/2){ 
       radius+=15; 
      }else{ 
       radius = 10; 
       clear = true; 
      } 
      try { 
       Thread.sleep(360); 
      } catch (InterruptedException e) { 
       // Interrupted 
      } 

會很感激,如果有人可以幫助我在這裏。由於這個問題,我幾個星期無法繼續我的項目。

回答

2

只是清空畫布

Paint clearPaint = new Paint(); 
clearPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 

在你的,如果()塊清除畫布創建一個新的油漆實例,用油漆

上述實例
if(clear){ 
    canvas.drawPaint(clearPaint); 
    clear = false; 
} 
+0

我想你的建議漆成,但第一循環整個動畫還是發瘋,這意味着幾個圈後同時繪製(彷彿重現)和別人的頂部,沒有結構:(謝謝反正畫,我願意接受任何新的想法 – REG1 2014-12-05 17:23:57

+0

也就是說因爲這些圈子正在繪製在t上彼此運作。將發佈示例代碼。 – 2014-12-09 13:51:36

+0

謝謝您的回覆。我正在爲考試而學習,這就是爲什麼我最近沒有太多時間。你的意思是,你會發布如何繪製圓圈的示例代碼?如果是這樣,那將是非常有用的,因爲我看不到我做錯了什麼(對我而言,他們並不是互相牽制)。再次感謝 – REG1 2014-12-11 15:55:51

相關問題