0

これは私が持っている onDraw メソッドです:

protected void onDraw(Canvas canvas) {
    canvas.drawBitmap(bitmap, 0, 0, mBitmapPaint); // Deseneaza Bitmapul mutabil

        if (shapes.size() > 0) {
        for (ShapeFromLines shapesfromline : shapes) {
            if (shapesfromline.size() > 1) {
                LogService.log("", "shapes: " + shapesfromline.size());
                float startx, starty;
                startx = shapesfromline.get(0).stopX;
                starty = shapesfromline.get(0).stopY;
                for (int i = 1; i < shapesfromline.size(); i++) {
                    LogService.log("", "----size color in ondraw: " + shapesfromline.get(i).getPaint().getColor());
                    canvas.drawLine(startx, starty, shapesfromline.get(i).getStopX(), shapesfromline.get(i).stopY, shapesfromline.get(i).getPaint());
                    LogService.log("", "shapes: drawn");
                    startx = shapesfromline.get(i).stopX;
                    starty = shapesfromline.get(i).stopY;
                }
            }
        }

    }
        for (int i = 0; i < bitmaps.size(); i++) {
            if ((bitmaps.get(i).bitmap != null)) {
                canvas.save();
                canvas.rotate(bitmaps.get(i).rectrotateVal, bitmaps.get(i).pX + (bitmaps.get(i).bitmap.getWidth() / 2), bitmaps.get(i).pY + (bitmaps.get(i).bitmap.getHeight() / 2));
                mBitmapPaint.setAlpha(bitmaps.get(i).alpha);
                // canvas.drawRect(bitmaps.get(i).rect, cPaint);
                canvas.drawBitmap(bitmaps.get(i).bitmap, bitmaps.get(i).pX, bitmaps.get(i).pY, mBitmapPaint);
                canvas.restore();
            }
        }
        mBitmapPaint.setAlpha(255);
        canvas.drawPath(mPath, paint);
    }
}

できるように、いくつかの形状があります (各形状は、ShapesFromLines という名前のポイントの配列リストから作成されます。現在、私の形状の最初のポイントは、現在の場所を保存する touchDown (ontouchevent) からのものです。その後、他のポイントはタッチで保存されます。画面を押すと、最初にポイントが描画され、2 回目にはそれらの 2 つのポイントが接続され、次に 3 つというように接続されます.X、Y、およびペイントを各ポイントに保存します.ご覧のとおり、これらのポイントのペイント値を返す logservice が描画にあり、現在のパスの色を変更するカラー ピッカーを備えた関数がありますが、これはすべての直線の色を変更することに成功しています。 、絵を追加したいとき、メインペイントを透明に設定すると、線は透明になりますが、ポイント(接続する必要がある)は正しい色になります。何が間違っている可能性がありますか?

4

1 に答える 1

0

オブジェクトを作成するときにペイントを参照として渡し、それを変更するとペイントも変更されます。私はそれを修正するためにこれをしました:

Paint linepaint = new Paint();
        linepaint.setColor(paint.getColor());
        linepaint.setAlpha(paint.getAlpha());
        linepaint.setAntiAlias(true);
        linepaint.setDither(true);
        linepaint.setStyle(paint.getStyle());
        linepaint.setStrokeJoin(paint.getStrokeJoin());
        linepaint.setStrokeCap(paint.getStrokeCap());
        linepaint.setStrokeWidth(paint.getStrokeWidth());
pointsForLines.add(new Points(stopX, stopY, linepaint));

ペイントは、以前使用していたグローバル ペイントでした。

于 2013-10-31T13:01:21.027 に答える