画布绘制位图覆盖绘制的路径

时间:2017-08-17 15:03:49

标签: android canvas bitmap

我有画布问题我有两个选项要么用画颜绘画要么添加图像但是当我选择在绘图后添加图像时图画已经消失但是当我再次选择绘图并开始绘制之前的图像时绘图显示并删除图像。

public class DrawCanvas extends View {
Bitmap bitmap;
private Paint paint = new Paint();
private Path path;
ArrayList<Path> paths = new ArrayList<>();
ArrayList<Path> undo = new ArrayList<>();
final Paint mBackgroundPaint;
ArrayList<Emotion> emotions;
private boolean mDrawingEnabled = true;
float currentX = 0, currentY = 0;

public DrawCanvas(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);

    bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.launcher);
    paint.setAntiAlias(false);
    paint.setColor(Color.BLACK);
    paint.setStrokeJoin(Paint.Join.MITER);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(30f);
    emotions = new ArrayList<>();
    path = new Path();
    mBackgroundPaint = new Paint();
    mBackgroundPaint.setColor(Color.WHITE);
}

@Override
protected void onDraw(Canvas canvas){
    if (mDrawingEnabled ) {
        canvas.drawPath(path, paint);
    }
    else{
        canvas.drawBitmap(bitmap, currentX, currentY, null);
    }
}

@Override
public boolean onTouchEvent(MotionEvent motionEvent){
    int xPos =(int) motionEvent.getX(), yPos =(int) motionEvent.getY();

    final int action = motionEvent.getAction();
    if (mDrawingEnabled){
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                path.moveTo(xPos, yPos);
                return true;
            case MotionEvent.ACTION_MOVE:
                path.lineTo(xPos, yPos);
                break;
            case MotionEvent.ACTION_UP:
                paths.add(path);
                break;
            default:
                return false;
        }

    }
    else {
        final float me_x = motionEvent.getX();
        final float me_y = motionEvent.getY();

        switch ( action ) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_MOVE:
            case MotionEvent.ACTION_UP:
                currentX = me_x;
                currentY = me_y;
                break;
        }
    }

    invalidate();
    return true;
}

public void undo(){
    if (paths.size()>0){
        undo.add(paths.remove(paths.size()-1));
    }
}

public void redo(){
    if (undo.size()>0){
        paths.add(undo.remove(undo.size()-1));
    }
}

final void enableDrawing() { mDrawingEnabled = true; }

final void disableDrawing() { mDrawingEnabled = false; }

public void changeBrushColor(int color){
    paint.setColor(color);
}

public void changeBrushSize(int size){
    paint.setStrokeWidth(size);
}

}

here is the drawing

and when I add image clears the drawing

我希望将绘制的路径保留在图像旁边。

0 个答案:

没有答案