1

New to Android Development, My app is Draw path on canvas(having Bitmap) with multiple colors selecting from color picker. previous drawn path color is updating with new path color on the canvas. any on help me, this is my code.........

@Override
public void run() {
    // TODO Auto-generated method stub
    while (locker) {
        canvas = null;
        try {
            if (!holder.getSurface().isValid()) {
                continue;
            }
            canvas = holder.lockCanvas();

            draw(canvas);

        } finally {
            if (canvas != null) {
                holder.unlockCanvasAndPost(canvas);
            }
        }
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // synchronized (thread.getSurfaceHolder()) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        path = new Path();
        path.moveTo(event.getX(), event.getY());
        path.lineTo(event.getX(), event.getY());
    } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        path.lineTo(event.getX(), event.getY());
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        path.lineTo(event.getX(), event.getY());
        paths.add(path);
    }
    return true;
    // }
}

/**
 * This method deals with paint-works. Also will paint something in
 * background
 */
private void draw(Canvas canvas) {
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.bell);
    // canvas.drawColor(Color.CYAN);
    canvas.drawBitmap(bitmap, 20, 20, mPaint);
    // canvas.drawPath(mPath, mPaint);
    for (Path path : paths) {
        // canvas.drawPoint(graphic.x, graphic.y, mPaint);
        canvas.drawPath(path, mPaint);
    }
}

}

GOLDEE
  • 2,270
  • 3
  • 23
  • 48

1 Answers1

0

You need to remember for each path the color it was drawn with. For example you could have a list of colors (integers) that you fill at the same time as your paths List. Then in your draw method do this :

private void draw(Canvas canvas) {
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.bell);
    canvas.drawBitmap(bitmap, 20, 20, mPaint);

    int count = path.size();
    for (int i = 0; i < count; i++) {
        mPaint.setColor(colors.get(i));
        canvas.drawPath(paths.get(i), mPaint);
    }
}
XGouchet
  • 9,652
  • 9
  • 43
  • 80