0

我正在使用PhotoView来实现 Pinch to Zoom 功能。幸运的是,我的应用程序能够从给定的图片中获取图片uri,但是在显示它时,它只显示一个透明框。

image_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <com.github.chrisbanes.photoview.PhotoView
        android:id="@+id/zoom_iv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

实现功能的 Kotlin 代码:

 ... 
   binding.image.setOnClickListener(){
       ImageLayoutDialog()
   }
 ...
 ...
 ...
 private fun ImageLayoutDialog() {
        val imageLayoutBinding =
            ImageLayoutBinding.inflate(LayoutInflater.from(requireContext()))
        val photoView: PhotoView = imageDialogBinding.zoomIv
        val mBuilder = AlertDialog.Builder(requireContext())
            .setView(
                imageLayoutBinding .root
            )

        Glide.with(requireActivity())
            .load(customUri)
            .into(photoView)
        val mAlertDialog : AlertDialog =  mBuilder.create()
        mAlertDialog.show()
        mAlertDialog.setCanceledOnTouchOutside(false)
    }

当我点击image我得到一个透明的屏幕。但我期待customUri那里的内容。有什么解决办法吗?

编辑 1.0

现在对话框加载。但设置视图后,它不显示图像。

4

1 回答 1

1

在这种情况下,我建议您使用其他类型的对话框。像 DialogFragment 或 AppCompatDialog。

使用 AppCompatDialog 的解决方案(我认为这与您的需求最相似):

class ImageDialog (private var context: Context, private var yourUri: Uri) : AppCompatDialog(context) {

private var _binding: DialogBinding? = null
private val binding get() = _binding!!

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

   val layoutInflater = LayoutInflater.from(context)
    _binding = DialogBinding.inflate(layoutInflater)

    setContentView(binding.root)

   //here you can load your Uri with Glide.

}

}

实例化 AppCompatDialog:

val imageDialog = ImageDialog(requireContext(), yourUri)
                    imageDialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
                    imageDialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
                    navigateToChangeUserAddressDialog.show()
            

我知道不是警报对话框,但我正在尝试找到解决方案:D

您始终可以向该对话框添加个性化按钮以在单击 imageDialog.cancel() 后将其关闭,或者如果您想在单击视图后执行某些逻辑,也可以传递 lambda。

于 2021-10-26T21:14:13.457 回答