From 8df2f009a97e728ed118d503476a595e7df79a09 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Fri, 5 Dec 2025 00:30:37 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]=20=E4=B9=A6=E7=B1=8D?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=B0=81=E9=9D=A2=E5=A4=A7=E5=9B=BE=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E6=88=96=E4=BF=9D=E5=AD=98=20#419?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/ui/widget/dialog/PhotoDialog.kt | 33 ++++++++++++++ app/src/main/res/layout/dialog_photo_view.xml | 44 +++---------------- 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/dialog/PhotoDialog.kt b/app/src/main/java/io/legado/app/ui/widget/dialog/PhotoDialog.kt index 9bebadcae..302341e21 100644 --- a/app/src/main/java/io/legado/app/ui/widget/dialog/PhotoDialog.kt +++ b/app/src/main/java/io/legado/app/ui/widget/dialog/PhotoDialog.kt @@ -1,8 +1,11 @@ package io.legado.app.ui.widget.dialog import android.annotation.SuppressLint +import android.graphics.Bitmap +import android.graphics.drawable.BitmapDrawable import android.os.Bundle import android.view.View +import android.view.ViewGroup import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy import com.bumptech.glide.request.RequestOptions @@ -15,7 +18,10 @@ import io.legado.app.help.glide.OkHttpModelLoader import io.legado.app.model.BookCover import io.legado.app.model.ImageProvider import io.legado.app.model.ReadBook +import io.legado.app.utils.ImageSaveUtils.saveImageToGallery +import io.legado.app.utils.toastOnUi import io.legado.app.utils.viewbindingdelegate.viewBinding +import java.io.ByteArrayOutputStream /** * 显示图片 @@ -29,6 +35,13 @@ class PhotoDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_photo_view) } } + override fun onStart() { + super.onStart() + val sheet = dialog + ?.findViewById(com.google.android.material.R.id.design_bottom_sheet) + sheet?.layoutParams?.height = ViewGroup.LayoutParams.MATCH_PARENT + } + private val binding by viewBinding(DialogPhotoViewBinding::bind) @SuppressLint("CheckResult") @@ -59,6 +72,26 @@ class PhotoDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_photo_view) .downsample(DownsampleStrategy.NONE) .into(binding.photoView) } + binding.photoView.setOnLongClickListener { + saveCurrentImage() + true + } + } + + private fun saveCurrentImage() { + val drawable = binding.photoView.drawable ?: return + val bitmap = (drawable as? BitmapDrawable)?.bitmap ?: return + + val byteArray = ByteArrayOutputStream().use { stream -> + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream) + stream.toByteArray() + } + + val success = saveImageToGallery(requireContext(), byteArray) + + toastOnUi( + if (success) "已保存到相册" else "保存失败" + ) } } diff --git a/app/src/main/res/layout/dialog_photo_view.xml b/app/src/main/res/layout/dialog_photo_view.xml index 808897770..43e44bf28 100644 --- a/app/src/main/res/layout/dialog_photo_view.xml +++ b/app/src/main/res/layout/dialog_photo_view.xml @@ -1,47 +1,15 @@ - - - - - - - + android:layout_height="match_parent" + android:paddingHorizontal="16dp"> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:adjustViewBounds="true" + android:scaleType="fitCenter" />