0

私はフィンガーペイントを使って線を描こうとしていますが、その線をマルチカラーで描きたいと思っています。しかし、最初に線を引くとうまくいきますが、その後別の線を引くと、最初の線の色が失われ、単色の線のようになります。

参照リンクも大歓迎です..!!!!

前もって感謝します。

4

2 に答える 2

3

色の違いはhue、のサイズから作成されたプロパティに依存すると推測できpointsToDrawます。

// 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違いがあるかどうかを確認してください。

于 2013-01-04T09:48:35.357 に答える
1

コードが行っていることは、各パスの新しいセグメントをペイントするときに色をスムーズに変更することです。これは次の行で行われます。

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

huei は反復変数であるため、スムーズに変化しています。コードの問題は、 を計算する除数として定数値を使用する代わりに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);
                    }
                }
            }
        }
    }
于 2013-01-07T16:59:24.677 に答える