2013-01-04 55 views
0

我想繪製使用手指畫線,我想繪製多行顏色線都工作正常。但是在第一次繪製線條時發生了什麼,然後它可以很好地工作,但是之後如果我繪製另一條線條,那麼第一條線的顏色就會從中失去,並且會變成單一顏色線條。行顏色覆蓋在android的第一行顏色

任何參考鏈接也很感激.. !!!!

在此先感謝。

回答

3

我只能假設顏色之間的差異取決於從pointsToDraw的大小創建的hue屬性。

// set paint to whatever color you want 
float hue = (float)i /pointsToDraw.size(); 

您在屏幕上繪製每一根線條不是的精確副本以前,權?所以pointsToDraw將在大小不等,其結果是hue將有不同的線路不同的值。

而且由於hue用於生成線條顏色,因此每條新線條都將具有唯一的顏色。

mPaint.setColor(Color.HSVToColor(
     new float[] { 
      hue*360, 1, 1 
     })); 

要測試這個假設,試着給hue分配一個常數值,看看是否有差異。

+0

相反deviding到'pointsToDraw.size()',儘量devide爲恆定值,如:'色調=(浮點)的i/200; '玩不同的值,看看是否有結果。 –

1

你的代碼正在做什麼只是在繪製每個路徑的新段時平滑地改變顏色。 這是在做行:

float hue = (float)i /pointsToDraw.size(); 
mPaint.setColor(Color.HSVToColor(
           new float[] { 
             hue*360, 1, 1 
           })); 

hue順利改變,因爲我是你的迭代變量。 您的代碼存在的問題是,您不是使用某個常數值作爲除數來計算hue,而是使用的值取決於您在屏幕上的路徑數(即pointsToDraw.size())。

所以我認爲下面的代碼會做到這一點。 (我就是這樣做只是改變除數計算hue

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     if(clearCanvas) 
     { // Choose the colour you want to clear with. 
      canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
      clearCanvas = false; 
      fl.invalidate(); 
     }else { 

      synchronized(pointsToDraw) 
      { 
       for (ArrayList<Point> paths : pointsToDraw) { 

        for (int i=0; i<paths.size()-1; ++i) { 

         // set paint to whatever color you want 
         float hue = (float)i /(paths.get(0).x+paths.get(0).y); 
         mPaint.setColor(Color.HSVToColor(
           new float[] { 
             hue*360, 1, 1 
           })); 
         canvas.drawLine(paths.get(i).x, paths.get(i).y, paths.get(i+1).x, paths.get(i+1).y, mPaint); 
        } 
       } 
      } 
     } 
    }