简介
模拟微信朋友圈九宫格图片选取,实现添加、预览、展示、删除等操作,并对选取条件进行自定义限制。
效果展示
流程图
代码示例
build.gradle(app)
implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0' //图片选择器
SelectPlotAdapter
package com.sci99.mtd_baselib_demo.adapter.upload
import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView
import com.sci99.mtd_baselib_demo.R
import com.sci99.mtd_baselib_demo.utils.Tools
/**
* Created by liubomin on 2022/11/17
*
* @author liubomin
*/
class SelectPlotAdapter(val context: Context, private val picMax: Int, val callback: CallbackListener) : RecyclerView.Adapter<SelectPlotAdapter.SelectHolder>() {
private var mediaDtoList = mutableListOf<String>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SelectHolder {
return SelectHolder(LayoutInflater.from(context).inflate(R.layout.item_image_upload, parent, false))
}
override fun onBindViewHolder(holder: SelectHolder, position: Int) {
if (position >= mediaDtoList.size && position < picMax) {
Tools.showGlide(context, holder.gallery, "");
holder.delete.visibility = View.GONE
} else {
Tools.showGlide(context, holder.gallery, mediaDtoList[position])
holder.delete.visibility = View.VISIBLE
}
holder.delete.setOnClickListener {
callback.delete(position)
}
holder.gallery.setOnClickListener {
//添加新图片点击事件
if (position >= mediaDtoList.size && position <= picMax - 1) {
callback.add()
} else {
//点击查看图片事件
callback.item(position)
}
}
}
override fun getItemCount(): Int {
return if (mediaDtoList.size == 0) {
1
} else {
if (mediaDtoList.size >= picMax) picMax else mediaDtoList.size + 1
}
}
class SelectHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val gallery: ImageView = itemView.findViewById(R.id.iv_show_gallery)
val delete: ImageView = itemView.findViewById(R.id.iv_delete)
}
interface CallbackListener {
fun add()
fun delete(position: Int)
fun item(position: Int)
}
@SuppressLint("NotifyDataSetChanged")
fun setImageList(mList: MutableList<String>) {
this.mediaDtoList