在绘画中撤消删除所有路径的功能

时间:2016-01-04 09:07:02

标签: android android-canvas

假设我绘制了两条线和我刚绘制的第二条线,我想将其删除。所以我写了下面一段代码来删除最后画出的一行。该守则如下

 public void onClickUndoLast() {
        if (paths.size() > 0) {

                undonePaths.add(paths.remove(paths.size()-1));
                invalidate();

        } else {

        }
        // toast the user
    }

它正在删除路径,但它正在清除所有带有路径的画布。我不知道是什么问题。 ?我使用的是与this问题中使用的相同的类。所以请不要将此问题标记为副本,因为那里的解决方案无效。你们有什么想法吗? ?

修改1:

My on Draw方法就像这样

@Override
protected void onDraw(Canvas canvas) {
    /*
     * Draw the image into center
     */
    //int cx = (mWidth - mBitmap.getWidth()) >> 1; // same as (...) / 2
    //int cy = (mHeight - mBitmap.getHeight()) >> 1;

    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
    for (PathPoints p : paths) {
        mPaint.setColor(p.getColor());

        mPaint.setStrokeWidth(p.getStrockWidth());
        if (p.isTextToDraw()) {
            //canvas.drawText(p.textToDraw, p.x, p.y, mPaint);
        } else {
            canvas.drawPath(p.getPath(), mPaint);
        }
    }
    //mPaint.setColor(Color.GREEN);
    mPaint.setStrokeWidth(strockWidth);
    mPaint.setColor(myPaintColor);
    //for overlapping
   // mPaint.setXfermode(new AvoidXfermode(myPaintColor, 90, AvoidXfermode.Mode.AVOID));
    canvas.drawPath(mPath, mPaint);
}

1 个答案:

答案 0 :(得分:1)

如果您可以发布您拥有的确切代码,那就太棒了。但是根据你的说法,为了达到你想要的效果,你需要使用下面的onDraw()方法:

    @Override
    protected void onDraw(Canvas canvas) {
        // some code
        for (Path p : paths){
            canvas.drawPath(p, mPaint);
        }
        // some code
    }

pathsList对象的Path。因此,每次绘制新路径时,只需将其添加到此列表中即可。按撤消按钮后,从列表中删除最后一项并致​​电invalidate()。这样,每次按撤消时,绘制的路径数减少1.