Чертежный вид с несколькими цветами с возможностью отмены

Мой чертежный вид работает хорошо с многоцветным изображением, а также выполняет отмену, но отмену работает, когда я меняю цвет. Если я использую один цвет и рисую несколько линий, тогда все отменяется, но если я рисую одну линию одним цветом, а вторую линию с другим цвет, который он может отменить, в целом, если я выберу один цвет, и я подниму палец вверх и начну рисовать одним цветом, то отмена отменяет все, а не один за другим.

public class DrawingView extends View {
private static final float TOUCH_TOLERANCE = 4;
public static ArrayList<Pair<Path, Paint>> p = new ArrayList<Pair<Path, Paint>>();
Paint mPaint;
//MaskFilter  mEmboss;
//MaskFilter  mBlur;
Bitmap mBitmap;
Canvas mCanvas;
Path mPath;
Paint mBitmapPaint;
ProgressDialog pd;
String color;
private ArrayList<Path> paths = new ArrayList<Path>();
private float mX, mY;

public DrawingView(Context context, String color) {
    super(context);
    // TODO Auto-generated constructor stub
    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    mPaint.setDither(true);
    //  mPaint.setColor(Color.parseColor(color));
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeJoin(Paint.Join.ROUND);
    mPaint.setStrokeCap(Paint.Cap.ROUND);
    mPaint.setStrokeWidth(10);
    pd = new ProgressDialog(context);
    mPath = new Path();
    // ImageEditOptionActivity.pathsList.add(mPath);
    mBitmapPaint = new Paint();
    p.add(new Pair<Path, Paint>(mPath, mPaint));
    // ImageEditOptionActivity.pathsList.add(mPath);
    //colorlist.put(mPath,color);
    mBitmapPaint.setColor(Color.parseColor(color));
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);


    if (w > 0 && h > 0) {
        mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mBitmap);
    } else {
        mBitmap = Bitmap.createBitmap(300, 250, Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mBitmap);
    }

}

@Override
public void draw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.draw(canvas);
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
    //  canvas.drawPath(mPath, mPaint);

    for (Pair<Path, Paint> pp : p) {
        canvas.drawPath(pp.first, pp.second);
    }

}

private void touch_start(float x, float y) {
    mPaint.setColor(ImageEditOptionActivity.pencolor);
    mPath.reset();
    mPath.moveTo(x, y);
    mX = x;
    mY = y;
}

private void touch_move(float x, float y) {
    float dx = Math.abs(x - mX);
    float dy = Math.abs(y - mY);
    if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
        mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
        mX = x;
        mY = y;
    }
}

private void touch_up() {
    mPath.lineTo(mX, mY);

    mCanvas.drawPath(mPath, mPaint);
    ImageEditOptionActivity.pathsList.add(mPath);
    p.add(new Pair<Path, Paint>(mPath, mPaint));
    mPath.reset();
    mPath = new Path();
    //colorlist.put(mPath,color);
    mPaint = new Paint(mPaint);

    // p.add(new Pair<Path, Paint>(mPath, mPaint));


}


@Override
public boolean onTouchEvent(MotionEvent event) {
    float x = event.getX();
    float y = event.getY();


    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touch_start(x, y);

            invalidate();
            break;
        case MotionEvent.ACTION_MOVE:
            touch_move(x, y);
            invalidate();
            break;
        case MotionEvent.ACTION_UP:


            touch_up();
            invalidate();
            break;
    }

    return SMILEY;
}

}

и я создаю вид, когда я нажимаю на кнопку инструмента пера, и он просит выбрать цвет, я выбрал цвет и рисую, приведенный ниже код

  private String colorDialogForPentool() {

    final Dialog dialogView = new Dialog(this);
    dialogView.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialogView.setContentView(R.layout.dialog_colorpicker);
    dialogView.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    textColor = (TextView) dialogView.findViewById(R.id.textView);
    linearLayoutColorBox = (LinearLayout) dialogView.findViewById(R.id.linearLayout);
    btn_dialog_ok = (Button) dialogView.findViewById(R.id.btn_dialog_ok);
    colorPickerView = (ColorPickerView) dialogView.findViewById(R.id.colorPickerView);

    colorPickerView.setColorListener(new ColorPickerView.ColorListener() {
        @Override
        public void onColorSelected(int color) {

            textColor.setText("#" + colorPickerView.getColorHtml());
            pencolor = color;
            linearLayoutColorBox.setBackgroundColor(color);
        }
    });

    btn_dialog_ok.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            color = textColor.getText().toString();

            mDrawingView = new DrawingView(getApplicationContext(), color);
            mDrawingPad.setId(id);
            mDrawingPad.addView(mDrawingView);


            dialogView.dismiss();
        }
    });
    dialogView.show();

    return pentoolcolor;

}

моя кнопка pen tool - это значок меню.

0 ответов

Другие вопросы по тегам