|
@@ -1,6 +1,6 @@
|
|
|
/**
|
|
|
* Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
|
|
|
- *
|
|
|
+ * <p>
|
|
|
* THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
|
|
|
* AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
|
|
|
* UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
|
|
@@ -10,37 +10,75 @@
|
|
|
package com.compdfkit.tools.pdfview;
|
|
|
|
|
|
import android.content.Context;
|
|
|
+import android.content.res.TypedArray;
|
|
|
+import android.graphics.Bitmap;
|
|
|
import android.util.AttributeSet;
|
|
|
import android.widget.FrameLayout;
|
|
|
+import android.widget.RelativeLayout;
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
import androidx.annotation.Nullable;
|
|
|
+import androidx.constraintlayout.widget.ConstraintLayout;
|
|
|
|
|
|
+import com.bumptech.glide.request.target.SimpleTarget;
|
|
|
+import com.bumptech.glide.request.transition.Transition;
|
|
|
import com.compdfkit.core.document.CPDFDocument;
|
|
|
+import com.compdfkit.tools.R;
|
|
|
+import com.compdfkit.tools.utils.glide.CPDFImageLoad;
|
|
|
+import com.compdfkit.tools.utils.glide.pdf.CGlidePDFUrl;
|
|
|
+import com.compdfkit.ui.reader.IReaderViewCallback;
|
|
|
+import com.compdfkit.ui.widget.CPDFSlideBar;
|
|
|
|
|
|
|
|
|
-public class CPDFReaderView extends FrameLayout {
|
|
|
+public class CPDFReaderView extends RelativeLayout implements IReaderViewCallback {
|
|
|
|
|
|
private com.compdfkit.ui.reader.CPDFReaderView cPdfReaderView;
|
|
|
|
|
|
+ private CPDFSlideBar slideBar;
|
|
|
+
|
|
|
+ private boolean enableSliderBar = true;
|
|
|
+
|
|
|
+ private CPDFSlideBar.SlideBarPosition slideBarPosition = CPDFSlideBar.SlideBarPosition.RIGHT;
|
|
|
+
|
|
|
+ private int sliderBarThumbnailWidth = 314;
|
|
|
+ private int sliderBarThumbnailHeight = 444;
|
|
|
+
|
|
|
public CPDFReaderView(@NonNull Context context) {
|
|
|
- super(context);
|
|
|
- initCPDFReaderView();
|
|
|
+ this(context, null);
|
|
|
}
|
|
|
|
|
|
public CPDFReaderView(@NonNull Context context, @Nullable AttributeSet attrs) {
|
|
|
- super(context, attrs);
|
|
|
- initCPDFReaderView();
|
|
|
+ this(context, attrs, 0);
|
|
|
}
|
|
|
|
|
|
public CPDFReaderView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
|
|
super(context, attrs, defStyleAttr);
|
|
|
+ initAttr(context, attrs);
|
|
|
+ initCPDFReaderView();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void initAttr(Context context, AttributeSet attributeSet){
|
|
|
+ TypedArray typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.Tools_CPDFReaderView);
|
|
|
+ if (typedArray != null) {
|
|
|
+ enableSliderBar = typedArray.getBoolean(R.styleable.Tools_CPDFReaderView_tools_enable_slider_bar, true);
|
|
|
+ int sliderBarPositionEnum = typedArray.getInt(R.styleable.Tools_CPDFReaderView_tools_slider_bar_position, 1);
|
|
|
+ if (sliderBarPositionEnum == 0){
|
|
|
+ slideBarPosition = CPDFSlideBar.SlideBarPosition.LEFT;
|
|
|
+ }else {
|
|
|
+ slideBarPosition = CPDFSlideBar.SlideBarPosition.RIGHT;
|
|
|
+ }
|
|
|
+ sliderBarThumbnailWidth = typedArray.getDimensionPixelOffset(R.styleable.Tools_CPDFReaderView_tools_slider_bar_thumbnail_width, 314);
|
|
|
+ sliderBarThumbnailHeight = typedArray.getDimensionPixelOffset(R.styleable.Tools_CPDFReaderView_tools_slider_bar_thumbnail_height, 444);
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
private void initCPDFReaderView() {
|
|
|
cPdfReaderView = new com.compdfkit.ui.reader.CPDFReaderView(getContext());
|
|
|
cPdfReaderView.setDoublePageMode(false);
|
|
|
+ cPdfReaderView.setReaderViewCallback(this);
|
|
|
addView(cPdfReaderView);
|
|
|
}
|
|
|
|
|
@@ -60,6 +98,8 @@ public class CPDFReaderView extends FrameLayout {
|
|
|
// If the PDF file was successfully opened, set the PDF document of the CPdfReaderView instance to the opened document.
|
|
|
case PDFDocumentErrorSuccess:
|
|
|
cPdfReaderView.setPDFDocument(cpdfDocument);
|
|
|
+ initCPDFSliderBar();
|
|
|
+
|
|
|
break;
|
|
|
// If the PDF file requires a password to be opened, do nothing for now.
|
|
|
case PDFDocumentErrorPassword:
|
|
@@ -71,9 +111,94 @@ public class CPDFReaderView extends FrameLayout {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public com.compdfkit.ui.reader.CPDFReaderView getCPdfReaderView(){
|
|
|
+ public com.compdfkit.ui.reader.CPDFReaderView getCPdfReaderView() {
|
|
|
return cPdfReaderView;
|
|
|
}
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
+ public void onTapMainDocArea() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onMoveToChild(int i) {
|
|
|
+ if (slideBar != null) {
|
|
|
+ slideBar.setPageIndexByAnimation(i, 500);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onEndScroll() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onScrolling() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onRecordLastJumpPageNum(int i) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void initCPDFSliderBar() {
|
|
|
+ if (!enableSliderBar){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ slideBar = new CPDFSlideBar(getContext());
|
|
|
+ LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
|
|
|
+ slideBar.setLayoutParams(layoutParams);
|
|
|
+ addView(slideBar);
|
|
|
+ int count = cPdfReaderView.getPDFDocument().getPageCount();
|
|
|
+ slideBar.setSlideBarBitmap(R.drawable.tools_ic_pdf_slider_bar_thumbnail);
|
|
|
+ slideBar.setDefaultThumbnailSize(sliderBarThumbnailWidth, sliderBarThumbnailHeight);
|
|
|
+ slideBar.setPageCount(count);
|
|
|
+ slideBar.setSlideBarPosition(slideBarPosition);
|
|
|
+ slideBar.setOnScrollToPageListener(new CPDFSlideBar.OnScrollToPageListener() {
|
|
|
+ int currentScrollPageIndex = -1;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onScrollBegin(int pageIndex) {
|
|
|
+ cPdfReaderView.removeAllAnnotFocus();
|
|
|
+ refreshBitmap(pageIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onScroll(int i) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onScrollEnd(int pageIndex) {
|
|
|
+ currentScrollPageIndex = -1;
|
|
|
+ cPdfReaderView.setDisplayPageIndex(pageIndex);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onScrollToPage(int pageIndex) {
|
|
|
+ refreshBitmap(pageIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void refreshBitmap(int pageIndex) {
|
|
|
+ if (currentScrollPageIndex != pageIndex){
|
|
|
+ currentScrollPageIndex = pageIndex;
|
|
|
+ CPDFImageLoad.loadPdfPageImage(getContext(),
|
|
|
+ new CGlidePDFUrl(cPdfReaderView.getPDFDocument(), currentScrollPageIndex, sliderBarThumbnailWidth, sliderBarThumbnailHeight),
|
|
|
+ cPdfReaderView.getPDFDocument().getAbsolutePath(),
|
|
|
+ false, false, new SimpleTarget<Bitmap>(sliderBarThumbnailWidth, sliderBarThumbnailHeight) {
|
|
|
+ @Override
|
|
|
+ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
|
|
+ slideBar.setThumbnailBitmap(resource);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
}
|