Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从android中撤消路径?_Java_Android - Fatal编程技术网

Java 如何从android中撤消路径?

Java 如何从android中撤消路径?,java,android,Java,Android,我正在尝试删除画布上绘制的最后一条路径。到目前为止,我尝试在ArrayList中添加路径,但没有找到任何方法可以轻松地从画布中删除路径 public class PaintView extends View { private Bitmap mBitmap; private Canvas mCanvas; private Path mPath; private Paint mPaint; private static final int TOUCH_TO

我正在尝试删除画布上绘制的最后一条路径。到目前为止,我尝试在ArrayList中添加路径,但没有找到任何方法可以轻松地从画布中删除路径

public class PaintView extends View {

    private Bitmap mBitmap;
    private Canvas mCanvas;
    private Path mPath;
    private Paint mPaint;
    private static final int TOUCH_TOLERANCE_DP = 20;
    private static final int BACKGROUND = Color.TRANSPARENT;
    private List<Point> mPoints = new ArrayList<Point>();
    private int mLastPointIndex = 0;
    private int mTouchTolerance;
    private boolean isPathStarted = false;
    private boolean canCreatePoints = true;
    private Polygon poly;
    private Builder build;
    private ArrayList<Polygon> polyList;
    private ArrayList<Path> undoPath, redoPath;

    public PaintView(Context context) {
        super(context);
        mCanvas = new Canvas();
        mPath = new Path();
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setColor(Color.BLACK);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(12);
        mTouchTolerance = dp2px(TOUCH_TOLERANCE_DP);

        polyList = new ArrayList<Polygon>();
        undoPath = new ArrayList<Path>();
        redoPath = new ArrayList<Path>();
    }

    @Override
    protected void onSizeChanged(int width, int height, int oldWidth,
            int oldHeight) {
        super.onSizeChanged(width, height, oldWidth, oldHeight);
        clear();

    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(BACKGROUND);
        canvas.drawBitmap(mBitmap, 0, 0, null);
        canvas.drawPath(mPath, mPaint);

        for(Path p : undoPath) {
            canvas.drawPath(p, mPaint);
        }

        for (Point point : mPoints) {
            canvas.drawPoint(point.x, point.y, mPaint);
        }

    }
贝娄:我通过按钮的动作使我的多边形变成芬兰语。我创建了一条从最后一点到第一点的路径,并将其绘制在画布上

public void finnishDraw(){
    if( mPoints.size() > 1 )
    {
        // start point
        Point p = mPoints.get(0);
        mPath.moveTo(p.x, p.y);
        // end point
        p = mPoints.get( mPoints.size() - 1);
        mPath.lineTo(p.x, p.y);
        mCanvas.drawPath(mPath, mPaint);
        mPath.reset();
        invalidate();

        int x[] = new int[mPoints.size()];
        int y[] = new int[mPoints.size()];

        build = new Builder();

        for(int i=0 ; i<mPoints.size() ; i++)
        {
            p = mPoints.get(i);
            x[i] = p.x;
            y[i] = p.y;

            build.addVertex(new Points(x[i],y[i]));

            Log.i("TEST","Adaug la builder punctele "+x[i]+" si "+y[i]);
        }

        poly = build.build();

        polyList.add(poly);
        mPoints.clear();
        mLastPointIndex = 0;

    }
}
public void finnishDraw(){
如果(mPoints.size()>1)
{
//起点
点p=mPoints.get(0);
百万帕移动到(每年,每年);
//终点
p=mPoints.get(mPoints.size()-1);
英里/小时线路至(年、月、日);
mCanvas.drawPath(mPath,mPaint);
mPath.reset();
使无效();
int x[]=新的int[mPoints.size()];
int y[]=新的int[mPoints.size()];
build=newbuilder();

对于(int i=0;i您无法撤消画布上的绘图路径。从:

通过画布,您的绘图实际上是在基础图形上执行的 位图,放置在窗口中

正如您所说,在绘制当前位图之前,您需要一个备份位图来保存当前位图的状态,例如使用

看看和(最后一个是针对iPhone的,但基本思想是一样的)


另一种减少内存消耗的方法是保存要在画布上绘制的对象的状态,并按需绘制(当需要显示部分或全部结果时)。

要删除最后一条路径,请仅应用此功能:

public void clearLast(){

    if(!paths.isEmpty()) {
        backgroundColor = DEFAULT_BG_COLOR;
        int size = paths.size();
        paths.remove(paths.get(size-1));
        normal();
        invalidate();
    }
}
public void clearLast(){

    if(!paths.isEmpty()) {
        backgroundColor = DEFAULT_BG_COLOR;
        int size = paths.size();
        paths.remove(paths.get(size-1));
        normal();
        invalidate();
    }
}