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<String?>, 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<Drawable?> {
|
override fun onLoadFailed(
|
e: GlideException?,
|
model: Any,
|
target: Target<Drawable?>,
|
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<Drawable?>,
|
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)
|
}
|
}
|
|
}
|