18034727885
2026-04-14 370014cbb9ec1ef64e7e42bb4f9a12671461d8e4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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)
        }
    }
 
}