package com.xw.common.base import android.app.Dialog import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.fragment.app.FragmentActivity import androidx.viewpager.widget.PagerAdapter import com.blankj.utilcode.util.ToastUtils import com.bumptech.glide.Glide import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.DecodeFormat import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target import com.xw.common.R import com.xw.common.databinding.WindowShowBigpicBinding import com.xw.common.databinding.WindowShowImgListBinding import com.xw.common.utils.ToolUtil class ShowImgListDialog(var activity: FragmentActivity, var imgUrlList: List, currentPosition: Int) : Dialog(activity, R.style.LoadingDialog) { var bind: WindowShowImgListBinding = DataBindingUtil.inflate(LayoutInflater.from(activity), R.layout.window_show_img_list, null, false) private var pageAdapter: ViewPagerAdapter? = null init { setContentView(bind.root) window!!.attributes.gravity = Gravity.BOTTOM //设置dialog的 进出 动画 window!!.setWindowAnimations(R.style.AnimUp) // 实例化一个ColorDrawable颜色为半透明 // 设置SelectPicPopupWindow弹出窗体的背景 window!!.setBackgroundDrawable(ColorDrawable(0x00000000)) window!!.attributes.width = ViewGroup.LayoutParams.MATCH_PARENT window!!.attributes.height = ViewGroup.LayoutParams.MATCH_PARENT pageAdapter = ViewPagerAdapter() bind.viewPager.adapter = pageAdapter bind.viewPager.currentItem = currentPosition setOnDismissListener { ToolUtil.fullscreen(activity, false) } } override fun show() { ToolUtil.fullscreen(activity, true) super.show() } //viewpager适配器 inner class ViewPagerAdapter : PagerAdapter() { override fun getCount(): Int { return imgUrlList.size } override fun isViewFromObject(view: View, `object`: Any): Boolean { return view === `object` } override fun instantiateItem(container: ViewGroup, position: Int): Any { val showBigpicBinding: WindowShowBigpicBinding = DataBindingUtil.inflate(LayoutInflater.from(activity), R.layout.window_show_bigpic, null, false) // 大图url val msgImgBigUrl: String? = imgUrlList[position] loadImg(showBigpicBinding, msgImgBigUrl) container.addView(showBigpicBinding.root) return showBigpicBinding.root } override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { container.removeView(`object` as View) } } private fun loadImg(showBigpicBinding: WindowShowBigpicBinding?, httpUrl: String?) { if (showBigpicBinding == null) { return } showBigpicBinding.windowShowPicImg.setOnOutsidePhotoTapListener { dismiss() } showBigpicBinding.windowShowPicImg.setOnPhotoTapListener { _, _, _ -> dismiss() } if (!httpUrl.isNullOrEmpty()) { Glide.with(activity).load(httpUrl).listener(object : RequestListener { override fun onLoadFailed( e: GlideException?, model: Any, target: Target, isFirstResource: Boolean ): Boolean { //加载图片出错 showBigpicBinding.windowShowPicPb.setVisibility(View.GONE) ToastUtils.showLong("图片加载失败") if (imgUrlList.size == 1) { dismiss() } return false } override fun onResourceReady( resource: Drawable?, model: Any, target: Target, dataSource: DataSource, isFirstResource: Boolean ): Boolean { //加载图片成功 showBigpicBinding.windowShowPicPb.setVisibility(View.GONE) return false } }).format(DecodeFormat.PREFER_RGB_565).into(showBigpicBinding.windowShowPicImg) } else { showBigpicBinding.windowShowPicPb.setVisibility(View.GONE) showBigpicBinding.windowShowPicImg.setImageResource(R.drawable.ps_image_placeholder) } } }