diff options
Diffstat (limited to 'android')
-rw-r--r-- | android/src/com/artifex/mupdfdemo/MuPDFReaderView.java | 71 | ||||
-rw-r--r-- | android/src/com/artifex/mupdfdemo/PageView.java | 20 |
2 files changed, 76 insertions, 15 deletions
diff --git a/android/src/com/artifex/mupdfdemo/MuPDFReaderView.java b/android/src/com/artifex/mupdfdemo/MuPDFReaderView.java index 3a1b708a..9cab70b7 100644 --- a/android/src/com/artifex/mupdfdemo/MuPDFReaderView.java +++ b/android/src/com/artifex/mupdfdemo/MuPDFReaderView.java @@ -96,13 +96,7 @@ public class MuPDFReaderView extends ReaderView { @Override public boolean onDown(MotionEvent e) { - switch (mMode) { - case Drawing: - MuPDFView pageView = (MuPDFView)getDisplayedView(); - if (pageView != null) - pageView.startDraw(e.getX(), e.getY()); - break; - } + return super.onDown(e); } @@ -119,10 +113,6 @@ public class MuPDFReaderView extends ReaderView { if (pageView != null) pageView.selectText(e1.getX(), e1.getY(), e2.getX(), e2.getY()); return true; - case Drawing: - if (pageView != null) - pageView.continueDraw(e2.getX(), e2.getY()); - return true; default: return true; } @@ -148,12 +138,69 @@ public class MuPDFReaderView extends ReaderView { } public boolean onTouchEvent(MotionEvent event) { - if ((event.getAction() & event.ACTION_MASK) == MotionEvent.ACTION_DOWN) + + if ( mMode == Mode.Drawing ) + { + float x = event.getX(); + float y = event.getY(); + switch (event.getAction()) + { + case MotionEvent.ACTION_DOWN: + touch_start(x, y); + break; + case MotionEvent.ACTION_MOVE: + touch_move(x, y); + break; + case MotionEvent.ACTION_UP: + touch_up(); + break; + } + } + + if ((event.getAction() & event.getActionMasked()) == MotionEvent.ACTION_DOWN) + { tapDisabled = false; + } return super.onTouchEvent(event); } + private float mX, mY; + + private static final float TOUCH_TOLERANCE = 2; + + private void touch_start(float x, float y) { + + MuPDFView pageView = (MuPDFView)getDisplayedView(); + if (pageView != null) + { + pageView.startDraw(x, y); + } + mX = x; + mY = y; + } + + private void touch_move(float x, float y) { + + float dx = Math.abs(x - mX); + float dy = Math.abs(y - mY); + if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) + { + MuPDFView pageView = (MuPDFView)getDisplayedView(); + if (pageView != null) + { + pageView.continueDraw(x, y); + } + mX = x; + mY = y; + } + } + + private void touch_up() { + + // NOOP + } + protected void onChildSetup(int i, View v) { if (SearchTaskResult.get() != null && SearchTaskResult.get().pageNumber == i) diff --git a/android/src/com/artifex/mupdfdemo/PageView.java b/android/src/com/artifex/mupdfdemo/PageView.java index 14d6b729..200821dd 100644 --- a/android/src/com/artifex/mupdfdemo/PageView.java +++ b/android/src/com/artifex/mupdfdemo/PageView.java @@ -364,16 +364,30 @@ public abstract class PageView extends ViewGroup { if (arc.size() >= 2) { Iterator<PointF> iit = arc.iterator(); p = iit.next(); - path.moveTo(p.x*scale, p.y*scale); + float mX = p.x * scale; + float mY = p.y * scale; + path.moveTo(mX, mY); while (iit.hasNext()) { p = iit.next(); - path.lineTo(p.x*scale, p.y*scale); + float x = p.x * scale; + float y = p.y * scale; + path.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2); + mX = x; + mY = y; } + path.lineTo(mX, mY); } } + + paint.setAntiAlias(true); + paint.setDither(true); + paint.setStrokeJoin(Paint.Join.ROUND); + paint.setStrokeCap(Paint.Cap.ROUND); + paint.setStyle(Paint.Style.STROKE); - paint.setStrokeWidth(INK_THICKNESS*scale); + paint.setStrokeWidth(INK_THICKNESS * scale); paint.setColor(INK_COLOR); + canvas.drawPath(path, paint); } } |