2013-01-04 54 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); 
        } 
       } 
      } 
     } 
    }