Android PDF Viewer嵌入Zoom in/Zoom out缩放功能求助
为Android PDFView添加自定义放大/缩小按钮解决方案
嘿,我来帮你搞定这个PDF缩放按钮的需求!你用的com.github.barteksc:android-pdf-viewer其实自带了手势缩放功能,但如果要添加自定义的放大/缩小按钮,咱们可以通过以下步骤实现:
第一步:修改XML布局,添加缩放按钮
首先把你的PDFView和进度条放到一个父布局里(比如ConstraintLayout或者RelativeLayout),然后添加两个按钮用于放大和缩小,让它们悬浮在PDF视图的角落。这里用ConstraintLayout举例:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <com.github.barteksc.pdfviewer.PDFView android:id="@+id/pdf_view" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="top" /> <ProgressBar android:id="@+id/pdf_progressBar" style="?android:attr/progressBarStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="215dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <!-- 放大按钮 --> <ImageView android:id="@+id/btn_zoom_in" android:layout_width="48dp" android:layout_height="48dp" android:layout_margin="16dp" android:background="?attr/selectableItemBackgroundBorderless" android:src="@drawable/ic_zoom_in" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- 缩小按钮 --> <ImageView android:id="@+id/btn_zoom_out" android:layout_width="48dp" android:layout_height="48dp" android:layout_margin="16dp" android:background="?attr/selectableItemBackgroundBorderless" android:src="@drawable/ic_zoom_out" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/btn_zoom_in" /> </androidx.constraintlayout.widget.ConstraintLayout>
注:你需要自己准备
ic_zoom_in和ic_zoom_out的图标资源,或者用系统自带的图标也可以。
第二步:在Java代码中为按钮添加点击事件
这个PDFView库已经提供了现成的zoomIn()和zoomOut()方法,直接调用就能实现缩放,而且会自动遵守你之前设置的最小/最大缩放比例。修改你的onCreate方法和相关代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ProgressBar progressBar = findViewById(R.id.pdf_progressBar); progressBar.setVisibility(View.VISIBLE); PDFView pdfView = findViewById(R.id.pdf_view); ImageView btnZoomIn = findViewById(R.id.btn_zoom_in); ImageView btnZoomOut = findViewById(R.id.btn_zoom_out); // 设置PDF加载 setPDF("new_quran_downloaded.pdf", 28, pdfView, progressBar); // 放大按钮点击事件 btnZoomIn.setOnClickListener(v -> { // 每次点击按固定比例放大 pdfView.zoomIn(); }); // 缩小按钮点击事件 btnZoomOut.setOnClickListener(v -> { // 每次点击按固定比例缩小 pdfView.zoomOut(); }); } // 调整setPDF方法,传入pdfView和progressBar参数 public void setPDF(String asset, int pages, PDFView pdfView, ProgressBar progressBar) { pdfView.fromAsset(asset) .swipeHorizontal(true) .onLoad(nbPages -> { pdfView.fitToWidth(0); // 设置缩放范围,确保按钮缩放不会超出限制 pdfView.setMinZoom(0.6f); // 注意这里建议用float类型,60%就是0.6f pdfView.setMidZoom(0.8f); pdfView.setMaxZoom(1.0f); progressBar.setVisibility(View.GONE); }) .defaultPage(pages) .enableAntialiasing(true) .load(); }
额外说明
- 如果你想自定义缩放的步长(比如每次放大1.2倍,缩小到0.8倍),可以不用
zoomIn()/zoomOut(),而是用zoomTo(float zoom)方法,比如:// 自定义放大步长 float currentZoom = pdfView.getZoom(); pdfView.zoomTo(currentZoom * 1.2f); - 这个库本身支持双指捏合的手势缩放,添加按钮只是补充了更直观的操作方式,两者可以共存。
内容的提问来源于stack exchange,提问作者Account Solution
相关产品推荐
相关产品推荐

