查看单据

This commit is contained in:
2024-03-19 09:53:01 +08:00
parent e7f173fde2
commit e9b9834a5c
20 changed files with 827 additions and 27 deletions
@@ -25,7 +25,7 @@ import com.luck.picture.lib.utils.DateUtils
class GridImageAdapter(context: Context?, result: List<LocalMedia>?) :
RecyclerView.Adapter<GridImageAdapter.ViewHolder?>() {
private val mInflater: LayoutInflater
val data = ArrayList<LocalMedia>()
var data = mutableListOf<LocalMedia>()
var selectMax = 9
/**
@@ -49,6 +49,12 @@ class GridImageAdapter(context: Context?, result: List<LocalMedia>?) :
}
}
fun setDatas(datas:MutableList<LocalMedia>){
this.data.clear()
this.data = datas
notifyDataSetChanged()
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var mImg: ImageView
var mIvDel: ImageView
@@ -0,0 +1,214 @@
package com.dahe.mylibrary.adapter
import android.content.Context
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.dahe.mylibrary.R
import com.dahe.mylibrary.callback.OnItemLongClickListener
import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.config.SelectMimeType
import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.utils.DateUtils
/**
* @authorluck
* @date2016-7-27 23:02
* @describeGridImageAdapter
*/
class OnlyShowImageAdapter(context: Context?, result: List<LocalMedia>?) :
RecyclerView.Adapter<OnlyShowImageAdapter.ViewHolder?>() {
private val mInflater: LayoutInflater
var data = mutableListOf<LocalMedia>()
var selectMax = 9
/**
* 删除
*/
fun delete(position: Int) {
try {
if (position != RecyclerView.NO_POSITION && data.size > position) {
data.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position, data.size)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
fun remove(position: Int) {
if (position < data.size) {
data.removeAt(position)
}
}
fun setDatas(datas:MutableList<LocalMedia>){
this.data.clear()
this.data = datas
notifyDataSetChanged()
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var mImg: ImageView
var mIvDel: ImageView
var tvDuration: TextView
init {
mImg = view.findViewById(R.id.fiv)
mIvDel = view.findViewById(R.id.iv_del)
tvDuration = view.findViewById(R.id.tv_duration)
}
}
override fun getItemCount(): Int {
// return if (data.size < selectMax) {
// data.size + 1
// } else {
return data.size
// }
}
override fun getItemViewType(position: Int): Int {
return if (isShowAddItem(position)) {
TYPE_CAMERA
} else {
TYPE_PICTURE
}
}
/**
* 创建ViewHolder
*/
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ViewHolder {
val view = mInflater.inflate(R.layout.gv_filter_image, viewGroup, false)
return ViewHolder(view)
}
private fun isShowAddItem(position: Int): Boolean {
val size = data.size
return position == size
}
/**
* 设置值
*/
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
//少于MaxSize张,显示继续添加的图标
// if (getItemViewType(position) == TYPE_CAMERA) {
// viewHolder.mImg.setImageResource(R.drawable.ic_add_image)
// viewHolder.mImg.setOnClickListener {
// if (mItemClickListener != null) {
// mItemClickListener!!.openPicture()
// }
// }
// viewHolder.mIvDel.visibility = View.INVISIBLE
// } else {
//删除按钮隐藏
viewHolder.mIvDel.visibility = View.GONE
viewHolder.mIvDel.setOnClickListener { view: View? ->
val index = viewHolder.absoluteAdapterPosition
if (index != RecyclerView.NO_POSITION && data.size > index) {
data.removeAt(index)
notifyItemRemoved(index)
notifyItemRangeChanged(index, data.size)
}
}
val media = data[position]
val chooseModel = media.chooseModel
val path = media.availablePath
val duration = media.duration
viewHolder.tvDuration.visibility =
if (PictureMimeType.isHasVideo(media.mimeType)) View.VISIBLE else View.GONE
if (chooseModel == SelectMimeType.ofAudio()) {
viewHolder.tvDuration.visibility = View.VISIBLE
viewHolder.tvDuration.setCompoundDrawablesRelativeWithIntrinsicBounds(
R.drawable.ps_ic_audio,
0,
0,
0
)
} else {
viewHolder.tvDuration.setCompoundDrawablesRelativeWithIntrinsicBounds(
R.drawable.ps_ic_video,
0,
0,
0
)
}
viewHolder.tvDuration.text = DateUtils.formatDurationTime(duration)
if (chooseModel == SelectMimeType.ofAudio()) {
viewHolder.mImg.setImageResource(R.drawable.ps_audio_placeholder)
} else {
Glide.with(viewHolder.itemView.context)
.load(
if (PictureMimeType.isContent(path) && !media.isCut && !media.isCompressed) Uri.parse(
path
) else path
)
.centerCrop()
.placeholder(R.color.app_color_f6)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(viewHolder.mImg)
}
//itemView 的点击事件
if (mItemClickListener != null) {
viewHolder.itemView.setOnClickListener { v: View? ->
val adapterPosition = viewHolder.absoluteAdapterPosition
mItemClickListener!!.onItemClick(v, adapterPosition)
}
}
if (mItemLongClickListener != null) {
viewHolder.itemView.setOnLongClickListener { v: View? ->
val adapterPosition = viewHolder.absoluteAdapterPosition
mItemLongClickListener!!.onItemLongClick(viewHolder, adapterPosition, v)
true
}
}
// }
}
private var mItemClickListener: OnItemClickListener? = null
fun setOnItemClickListener(l: OnItemClickListener?) {
mItemClickListener = l
}
interface OnItemClickListener {
/**
* Item click event
*
* @param v
* @param position
*/
fun onItemClick(v: View?, position: Int)
/**
* Open PictureSelector
*/
fun openPicture()
}
private var mItemLongClickListener: OnItemLongClickListener? = null
init {
mInflater = LayoutInflater.from(context)
data.addAll(result!!)
}
fun setItemLongClickListener(l: OnItemLongClickListener?) {
mItemLongClickListener = l
}
companion object {
const val TAG = "PictureSelector"
const val TYPE_CAMERA = 1
const val TYPE_PICTURE = 2
}
}