From d1ad269c3bc46ac070d3c682df390d04bd8cd619 Mon Sep 17 00:00:00 2001 From: Fred Ross-Perry Date: Wed, 17 Aug 2016 15:03:11 -0700 Subject: Android example - add first page and last page buttons also, change DocPageView to paint a white background before doing anything else. Makes for smoother-looking scrolling. And, re-introduce the slower scrolling (400 msec) when moving between pages. --- .../com/artifex/mupdf/android/DocActivityView.java | 44 +++++++++++--- .../com/artifex/mupdf/android/DocPageView.java | 10 +++ .../com/artifex/mupdf/android/DocViewBase.java | 8 ++- .../src/main/res/drawable/icon_first_page.xml | 23 +++++++ .../mupdf/src/main/res/drawable/icon_last_page.xml | 23 +++++++ .../mupdf/src/main/res/layout/pages_toolbar.xml | 71 ++++++++++++++++++++-- 6 files changed, 162 insertions(+), 17 deletions(-) create mode 100755 platform/android/example/mupdf/src/main/res/drawable/icon_first_page.xml create mode 100755 platform/android/example/mupdf/src/main/res/drawable/icon_last_page.xml (limited to 'platform/android') diff --git a/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocActivityView.java b/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocActivityView.java index 1c867b54..d04a0830 100644 --- a/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocActivityView.java +++ b/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocActivityView.java @@ -35,6 +35,8 @@ public class DocActivityView extends FrameLayout implements TabHost.OnTabChangeL private String mTagPages; ImageButton mReflowButton; + ImageButton mFirstPageButton; + ImageButton mLastPageButton; public DocActivityView(Context context) { @@ -233,13 +235,7 @@ public class DocActivityView extends FrameLayout implements TabHost.OnTabChangeL @Override public void onPageSelected(int pageNumber) { - mDocView.scrollToPage(pageNumber); - - if (mDocReflowView.getVisibility() == View.VISIBLE) - { - setReflowText(pageNumber); - mDocPagesView.setMostVisiblePage(pageNumber); - } + goToPage(pageNumber); } }); @@ -274,11 +270,17 @@ public class DocActivityView extends FrameLayout implements TabHost.OnTabChangeL } }); - // TODO: connect buttons to functions + // connect buttons to functions mReflowButton = (ImageButton)findViewById(R.id.reflow_button); mReflowButton.setOnClickListener(this); + mFirstPageButton = (ImageButton)findViewById(R.id.first_page_button); + mFirstPageButton.setOnClickListener(this); + + mLastPageButton = (ImageButton)findViewById(R.id.last_page_button); + mLastPageButton.setOnClickListener(this); + // start the views mDocView.start(path); if (usePagesView()) @@ -357,6 +359,32 @@ public class DocActivityView extends FrameLayout implements TabHost.OnTabChangeL { if (v == mReflowButton) onReflowButton(); + if (v == mFirstPageButton) + onFirstPageButton(); + if (v == mLastPageButton) + onLastPageButton(); + } + + private void onFirstPageButton() + { + goToPage(0); + } + + private void onLastPageButton() + { + int npages = mDocView.getPageCount(); + goToPage(npages-1); + } + + private void goToPage(int pageNumber) + { + mDocView.scrollToPage(pageNumber); + + if (mDocReflowView.getVisibility() == View.VISIBLE) + { + setReflowText(pageNumber); + mDocPagesView.setMostVisiblePage(pageNumber); + } } private void onReflowButton() diff --git a/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocPageView.java b/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocPageView.java index 944a5af7..a188f90a 100755 --- a/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocPageView.java +++ b/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocPageView.java @@ -54,6 +54,7 @@ public class DocPageView extends View implements Callback private final Paint mPainter; private final Paint mHighlightPainter; + private final Paint mBlankPainter; private final Paint mDotPainter; private final Rect mSrcRect = new Rect(); private final Rect mDstRect = new Rect(); @@ -92,6 +93,10 @@ public class DocPageView extends View implements Callback mHighlightPainter.setStyle(Paint.Style.FILL); mHighlightPainter.setAlpha(getContext().getResources().getInteger(R.integer.text_highlight_alpha)); + mBlankPainter = new Paint(); + mBlankPainter.setStyle(Paint.Style.FILL); + mBlankPainter.setColor(Color.WHITE); + mDotPainter = new Paint(); mDotPainter.setStyle(Paint.Style.FILL); mDotPainter.setColor(ContextCompat.getColor(context, R.color.blue_dot_color)); @@ -470,6 +475,11 @@ public class DocPageView extends View implements Callback @Override public void onDraw(Canvas canvas) { + // always start with a blank white background + Rect rBlank = new Rect(); + getLocalVisibleRect(rBlank); + canvas.drawRect(rBlank, mBlankPainter); + if (mFinished) return; diff --git a/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocViewBase.java b/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocViewBase.java index 06de523a..c271cad4 100755 --- a/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocViewBase.java +++ b/platform/android/example/mupdf/src/main/java/com/artifex/mupdf/android/DocViewBase.java @@ -949,6 +949,8 @@ public class DocViewBase { // scroll to bring the page into view + int scrollTime = 400; + // get current viewport Rect viewport = new Rect(); getGlobalVisibleRect(viewport); @@ -966,7 +968,7 @@ public class DocViewBase if ((childRect.height()) > viewport.height()) { // put the top of the page at the top and the left at 0 - smoothScrollBy(getScrollX(), getScrollY() - childRect.top, 1); + smoothScrollBy(getScrollX(), getScrollY() - childRect.top, scrollTime); } else { @@ -974,9 +976,9 @@ public class DocViewBase if (childRect.top < viewport.top || childRect.bottom > viewport.bottom) { if (childRect.top == 0) - smoothScrollBy(0, getScrollY(), 1); + smoothScrollBy(0, getScrollY(), scrollTime); else - smoothScrollBy(0, getScrollY() + viewport.height() / 2 - (childRect.bottom + childRect.top) / 2, 1); + smoothScrollBy(0, getScrollY() + viewport.height() / 2 - (childRect.bottom + childRect.top) / 2, scrollTime); } } } diff --git a/platform/android/example/mupdf/src/main/res/drawable/icon_first_page.xml b/platform/android/example/mupdf/src/main/res/drawable/icon_first_page.xml new file mode 100755 index 00000000..10714831 --- /dev/null +++ b/platform/android/example/mupdf/src/main/res/drawable/icon_first_page.xml @@ -0,0 +1,23 @@ + + + + + + + + \ No newline at end of file diff --git a/platform/android/example/mupdf/src/main/res/drawable/icon_last_page.xml b/platform/android/example/mupdf/src/main/res/drawable/icon_last_page.xml new file mode 100755 index 00000000..24796a83 --- /dev/null +++ b/platform/android/example/mupdf/src/main/res/drawable/icon_last_page.xml @@ -0,0 +1,23 @@ + + + + + + + + \ No newline at end of file diff --git a/platform/android/example/mupdf/src/main/res/layout/pages_toolbar.xml b/platform/android/example/mupdf/src/main/res/layout/pages_toolbar.xml index f5cbc4d6..39a097c0 100644 --- a/platform/android/example/mupdf/src/main/res/layout/pages_toolbar.xml +++ b/platform/android/example/mupdf/src/main/res/layout/pages_toolbar.xml @@ -15,10 +15,14 @@ android:paddingTop="10dp" android:paddingBottom="10dp"> + + android:orientation="vertical" + android:paddingLeft="10dp" + android:paddingRight="10dp" + > + android:id="@+id/first_page_button" + android:src="@drawable/icon_first_page" /> + android:text="FIRST PAGE"/> + + + + + + + + + + + + + + + + -- cgit v1.2.3