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" />