2013-01-04 3 views
0

나는 손가락 페인트를 사용하여 선을 그리려고하고 있으며 그 선을 여러 색상으로 모두 그려 내고 싶습니다. 모두 잘 작동합니다. 그러나 처음에는 선을 그릴 때 처음에는 아무 문제가 없지만 다른 선을 그으면 첫 번째 선의 색이 그 것으로부터 사라져 단일 선처럼됩니다.안드로이드에서 선 색상이 첫 번째 선 색상에서 오버라이드됩니다.

모든 참조 링크도 좋습니다 .. !!!!

미리 감사드립니다.

답변

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

을 계산하는 제수를 변화처럼, 일정한 값으로 나눔하려고 '다른 값으로 플레이하고 결과가 있는지 확인하십시오. –

1

코드가 수행하는 작업은 각 경로의 새 세그먼트를 페인팅 할 때 색을 부드럽게 변경하는 것입니다. 이는 선에서 이루어집니다 : 나는 당신의 반복 변수이기 때문에

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

hue

이 원활하게 변화하고있다. 코드의 문제는 제수로 상수 값을 사용하여 hue을 계산하는 대신 화면에있는 경로 수 (즉, pointsToDraw.size())에 의존하는 값을 사용하고 있다는 것입니다.

그래서 다음 코드가 그렇게 할 것이라고 생각합니다.) I/200 (=`색조 플로트; (제가했던 것은 단지 대신 pointsToDraw.size()``에 deviding의 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); 
        } 
       } 
      } 
     } 
    }