나는 pdf 파일이 있고 나는 우스운 canvas.And에 경로를 당기고있다. 나는 pdf 페이지를 스크롤 할 때 이전 캔버스를 보여 주려고한다. 나는 pdf 페이지 번호와 경로를 저장하고있다.android에서 페이지를 스크롤 할 때 이전 경로를 캔버스에 표시하는 방법은 무엇입니까?
내 코드 :
이 onTouch입니다 : ACTION_DOWN에 내가 경로에 대한 새로운 생성자를 생성하고이 새로운 경로를 부르고 모든이거든요 나는 잘 작동하는이 경로를 제거 된 path.If에 이전 경로와 최우선을 제거했다 . 배열 목록에 savingCanvas를 들어
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;
:이 캔버스에 경로를 보여주는를 들어 ArrayList를
private void saveCanvas() {
SaveCanvasDrawing canvasDrawing = new SaveCanvasDrawing();
canvasDrawing.setPath(signaturePath);
canvasDrawing.setPdfPageNumber(currentPage);
canvasDrawing.setxAxis(firstX);
canvasDrawing.setyAxis(firstY);
mSavingCanvasDrawing.add(canvasDrawing);
mCanvasHashMap.put(currentPage, mSavingCanvasDrawing);
}
내 캔버스 경로를 절약 : 다른 블록에서이 방법에서는 내가 이것을 호출 오전 path.When 내가 다시 설정하라는 있어요 캔버스가 내 경로를 그리지 않습니다.하지만 내 경로를 디버깅 할 때 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();
}
}
마지막의 onDraw() : 나는 확인하고이 방법 때 내 isSignatureSelected = 거짓; 내 저장된 arraylist 경로를 호출 오전 및 드로잉 오전 내 문제는 내가 redoCanvas()에서 경로를 리셋 할 때 캔버스에 경로를 표시하지 않는 것이 었습니다. 그러나 내가 캔버스를 리셋하는 캔버스를 제거하면 내 경로가 표시되지만 모든 경로를 취하고 있습니다. from signaturePath. 보호 무효의 onDraw (캔버스 캔버스) {
if (Constants.isSignatureSelected) {
if (Constants.draw) {
canvas.drawPath(signaturePath, signaturePaint);
}
} else {
if (mPageNumber.contains(currentPage)) {
for (Path p : mDrawingPath) {
canvas.drawPath(p, signaturePaint);
}
}
}
}
예 솔루션을 얻었습니다. computeScroll()에서 Path의 새 생성자를 만들고 onDraw()에서 경로 배열을 확인하고 경로를 캔버스에 추가하고 있습니다. – user123456