在android中滚动页面时,如何在画布上显示以前的路径?

在android中滚动页面时,如何在画布上显示以前的路径?,android,canvas,path,scroll,draw,Android,Canvas,Path,Scroll,Draw,我有一个pdf文件,我在迂回的画布上画了一条路径。当滚动pdf页面时,我尝试显示上一个画布。为此,我保存了pdf页码和路径 我的代码: 这是onTouch:在操作中,我每次都为路径创建新的构造函数。当它调用新路径时,是删除旧路径并覆盖旧路径。如果我删除此路径,则工作正常 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: signaturePaint = new Paint(Paint.DITHER_FL

我有一个pdf文件,我在迂回的画布上画了一条路径。当滚动pdf页面时,我尝试显示上一个画布。为此,我保存了pdf页码和路径

我的代码:

这是onTouch:在操作中,我每次都为路径创建新的构造函数。当它调用新路径时,是删除旧路径并覆盖旧路径。如果我删除此路径,则工作正常

switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:

        signaturePaint = new Paint(Paint.DITHER_FLAG);
        signaturePaint.setAntiAlias(true); 
        signaturePaint.setDither(true);
        signaturePaint.setColor(0xff0000cc); 
        signaturePaint.setStyle(Paint.Style.STROKE); 
        signaturePaint.setStrokeJoin(Paint.Join.ROUND); 
        signaturePaint.setStrokeCap(Paint.Cap.ROUND);
        signaturePaint.setStrokeWidth(1);

          **signaturePath = new Path();// When calling this my problem occure**

        if (Constants.draw) {

            Point p = getPagePositionOnScreen(currentPage);

            int currentPageWidth = getCurrentPageWidth(currentPage);
            int currentPageHeight = (int) getCurrentPageHeight(currentPage);
            if (currentPageWidth < x || currentPageHeight < y) {

            } else {
                if (Constants.isSignatureSelected)
                    signaturePath.moveTo(x, y);
                // pdfcanvas.moveTo(x, y);
            }
            firstX = x;
            firstY = y;
        }
        break;
    case MotionEvent.ACTION_MOVE:
        if (Constants.draw) {

            mPageNumber.add(currentPage);
            // int[][] currentPagesSize = pagesProvider.getPageSizes();
            float pageMarginX = getCurrentMarginX();
            float pageMarginy = getCurrentMarginY();
            // int pageWidth = currentPagesSize[0][0];
            // int pageHeight = currentPagesSize[0][1];
            int currentPageWidth = getCurrentPageWidth(currentPage);
            int currentPageHeight = (int) getCurrentPageHeight(currentPage);
            if (currentPageWidth < x || currentPageHeight < y) {

            } else {
                resetDirtyRect(x, y);
                int historySize = event.getHistorySize();
                for (int i = 0; i < historySize; i++) {
                    float historicalX = event.getHistoricalX(i);
                    float historicalY = event.getHistoricalY(i);
                    expandDirtyRect(historicalX, historicalY);
                    if (Constants.isSignatureSelected)
                        signaturePath.lineTo(historicalX, historicalY);
                }

            }
        }


        break;
    case MotionEvent.ACTION_UP:
        if (Constants.draw) {


            firstX = x;
            firstY = y;
            if (Constants.isSignatureSelected)
                saveCanvas();
        }
        break;
    }

    invalidate((int) (dirtyRect.left - HALF_STROKE_WIDTH),
            (int) (dirtyRect.top - HALF_STROKE_WIDTH),
            (int) (dirtyRect.right + HALF_STROKE_WIDTH),
            (int) (dirtyRect.bottom + HALF_STROKE_WIDTH));

    firstX = x;
    firstY = y;

    return true;
用于在画布上显示路径:在else块中的此方法中,我正在重置路径。调用此画布时,我没有绘制路径。但在调试时,我的路径不为null。但它没有在画布上显示路径

private void redoCanvas() {


    if (mCanvasHashMap.containsKey(currentPage)) {
        mDrawingPath.clear();
        mPageNumber.clear();
        for (int j = 0; j < mSavingCanvasDrawing.size(); j++) {
            int pageNumber = mSavingCanvasDrawing.get(j).getPdfPageNumber();

            if (pageNumber == currentPage) {
                float xAxis = mSavingCanvasDrawing.get(j).getxAxis();
                float yAxis = mSavingCanvasDrawing.get(j).getyAxis();
                Path path = mSavingCanvasDrawing.get(j).getPath();


                mDrawingPath.add(path);
                mPageNumber.add(pageNumber);
            } else {
                signaturePath.reset();
                invalidate();
            }
        }
    } else {
        signaturePath.reset();
        invalidate();
    }
}

是的,我得到了解决方案。在computeScroll()中,我创建了新的路径构造函数,在onDraw()中,我检查了路径数组列表,并将路径添加到画布中

是的,我得到了解决方案。在computeScroll()中,我创建了新的路径构造函数,在onDraw()中,我检查了路径数组列表,并将路径添加到画布中。
private void redoCanvas() {


    if (mCanvasHashMap.containsKey(currentPage)) {
        mDrawingPath.clear();
        mPageNumber.clear();
        for (int j = 0; j < mSavingCanvasDrawing.size(); j++) {
            int pageNumber = mSavingCanvasDrawing.get(j).getPdfPageNumber();

            if (pageNumber == currentPage) {
                float xAxis = mSavingCanvasDrawing.get(j).getxAxis();
                float yAxis = mSavingCanvasDrawing.get(j).getyAxis();
                Path path = mSavingCanvasDrawing.get(j).getPath();


                mDrawingPath.add(path);
                mPageNumber.add(pageNumber);
            } else {
                signaturePath.reset();
                invalidate();
            }
        }
    } else {
        signaturePath.reset();
        invalidate();
    }
}
    if (Constants.isSignatureSelected) {

        if (Constants.draw) {
            canvas.drawPath(signaturePath, signaturePaint);
        }
    } else {
        if (mPageNumber.contains(currentPage)) {
            for (Path p : mDrawingPath) {
                canvas.drawPath(p, signaturePaint);
            }
        }
    }

}