diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/MainActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/MainActivity.kt index f0479b7..cc23b9c 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/MainActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/MainActivity.kt @@ -1,5 +1,6 @@ package com.zmkg.coaloperation +import android.content.Intent import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment @@ -10,7 +11,7 @@ import com.zmkg.coaloperation.bottomtab.HomeBottomTabLayout import com.zmkg.coaloperation.databinding.ActivityMainBinding import com.zmkg.coaloperation.ui.home.fragment.HomeFragment import com.zmkg.coaloperation.ui.record.fragment.RecordFragment -import com.zmkg.coaloperation.ui.report.fragment.ReportFragment +import com.zmkg.coaloperation.ui.report.fragment.Report2Fragment import com.zmkg.coaloperation.ui.user.fragment.UserFragment class MainActivity : BaseVMBActivity(R.layout.activity_main), @@ -56,7 +57,7 @@ class MainActivity : BaseVMBActivity(R.layou } TAG_REPORT -> { - return ReportFragment() + return Report2Fragment() } // TAG_MESSAGE -> { @@ -77,4 +78,5 @@ class MainActivity : BaseVMBActivity(R.layou override fun transparentStatusBar(): Boolean { return true } + } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/CommonImageAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/CommonImageAdapter.kt new file mode 100644 index 0000000..108ee1c --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/CommonImageAdapter.kt @@ -0,0 +1,48 @@ +package com.zmkg.coaloperation.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.view.updateLayoutParams +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.zmkg.coaloperation.R +import com.zmkg.coaloperation.bean.CommonImageBean +import com.zmkg.coaloperation.databinding.ListItemCommonImageBinding +import com.zmkg.coaloperation.superfuntion.loadRoundedImage +import com.zmkg.coaloperation.utils.dp +import com.zmkg.coaloperation.utils.load + +class CommonImageAdapter(var list: MutableList, var imageSize: Int = 70.dp): + BaseQuickAdapter( + R.layout.list_item_common_image, list + ){ + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { + val binding = ListItemCommonImageBinding.inflate( + LayoutInflater.from(context), parent, false + ) + return VH(binding).also { + bindViewClickListener(it, viewType) + } + } + + override fun convert( + holder: VH, + item: CommonImageBean + ) { + holder.binding.ivImage.let { + it.updateLayoutParams { + width = imageSize + height = imageSize + } + if (item.isAddFlag) { + it.load(R.drawable.ic_add_image) + } else { + it.loadRoundedImage(item.imagePath, 3F) + } + } + } + + inner class VH(var binding: ListItemCommonImageBinding): BaseViewHolder(binding.root) + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointImageAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointImageAdapter.kt deleted file mode 100644 index 2ce5160..0000000 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointImageAdapter.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.zmkg.coaloperation.adapter - -import android.view.LayoutInflater -import android.view.ViewGroup -import com.chad.library.adapter.base.BaseQuickAdapter -import com.chad.library.adapter.base.viewholder.BaseViewHolder -import com.zmkg.coaloperation.R -import com.zmkg.coaloperation.bean.GeoPointImage -import com.zmkg.coaloperation.databinding.ListItemPointImageBinding -import com.zmkg.coaloperation.utils.load - -class GeoPointImageAdapter(list: MutableList): - BaseQuickAdapter( - R.layout.list_item_point_image, list - ){ - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { - val binding = ListItemPointImageBinding.inflate( - LayoutInflater.from(context), parent, false - ) - return VH(binding).also { - bindViewClickListener(it, viewType) - } - } - - override fun convert( - holder: VH, - item: GeoPointImage - ) { - holder.binding.ivPointImage.let { - if (item.isAddFlag) { - it.load(R.drawable.ic_add_image) - } else { - it.load(item.imagePath) - } - } - } - - inner class VH(var binding: ListItemPointImageBinding): BaseViewHolder(binding.root) - -} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointMultiAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointMultiAdapter.kt index be9bdaa..f98e487 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointMultiAdapter.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointMultiAdapter.kt @@ -1,7 +1,6 @@ package com.zmkg.coaloperation.adapter -import android.Manifest -import android.app.Activity +import android.annotation.SuppressLint import android.view.LayoutInflater import android.widget.LinearLayout import androidx.core.view.updateLayoutParams @@ -9,14 +8,13 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.zhihu.matisse.Matisse import com.zmkg.coaloperation.R import com.zmkg.coaloperation.base.BaseActivity -import com.zmkg.coaloperation.bean.BaseItem -import com.zmkg.coaloperation.bean.GeoPointImage +import com.zmkg.coaloperation.bean.CommonImageBean import com.zmkg.coaloperation.bean.GeoPointMultiItem import com.zmkg.coaloperation.databinding.ListItemPointBaseHorizontalBinding import com.zmkg.coaloperation.databinding.ListItemPointBaseVerticalBinding -import com.zmkg.coaloperation.ui.geologging.AddGeologicalPointFragment import com.zmkg.coaloperation.utils.GalleryUtils import com.zmkg.coaloperation.utils.gone import com.zmkg.coaloperation.utils.permission.StorageUtils @@ -60,18 +58,16 @@ class GeoPointMultiAdapter(list: MutableList) : if (item.images == null) { item.images = mutableListOf() } + val images = item.images!! rvImageList.let { rv -> rv.layoutManager = GridLayoutManager(rv.context, 4, GridLayoutManager.VERTICAL, false) - rv.adapter = GeoPointImageAdapter(item.images!!).also { + rv.adapter = CommonImageAdapter(images).also { it.setOnItemClickListener { adapter, view, position -> if (it.data[position].isAddFlag.not()) { return@setOnItemClickListener } - (context as BaseActivity).let { activity -> - StorageUtils.requestPermission(activity) { - GalleryUtils.openGallery(context as Activity, AddGeologicalPointFragment.IMAGE_REQUEST_CODE) - } - } } + openGallery(context as BaseActivity, it) + } } } } @@ -121,4 +117,18 @@ class GeoPointMultiAdapter(list: MutableList) : llBaseBottom.addView(itemBinding.root) } } + + @SuppressLint("NotifyDataSetChanged") + private fun openGallery(activity: BaseActivity, adapter: CommonImageAdapter) { + StorageUtils.requestPermission(activity) { + GalleryUtils.openGallery(activity) { data -> + val paths = Matisse.obtainPathResult(data) // 获取文件路径列表 + paths?.forEach { path -> + val size = adapter.list.size + adapter.list.add(size - 1, CommonImageBean(imagePath = path)) + } + adapter.notifyDataSetChanged() + } + } + } } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/ReportAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/ReportAdapter.kt new file mode 100644 index 0000000..81b99d9 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/ReportAdapter.kt @@ -0,0 +1,143 @@ +package com.zmkg.coaloperation.adapter + +import android.annotation.SuppressLint +import android.view.Gravity +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.LinearLayout +import androidx.core.view.updateLayoutParams +import androidx.recyclerview.widget.GridLayoutManager +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.zhihu.matisse.Matisse +import com.zmkg.coaloperation.R +import com.zmkg.coaloperation.base.BaseActivity +import com.zmkg.coaloperation.bean.CommonImageBean +import com.zmkg.coaloperation.bean.ReportItem +import com.zmkg.coaloperation.databinding.ListItemReportBinding +import com.zmkg.coaloperation.utils.GalleryUtils +import com.zmkg.coaloperation.utils.dp +import com.zmkg.coaloperation.utils.gone +import com.zmkg.coaloperation.utils.permission.StorageUtils +import com.zmkg.coaloperation.utils.visible + +class ReportAdapter(list: MutableList) : + BaseQuickAdapter(R.layout.list_item_report, list) { + + inner class VH(var binding: ListItemReportBinding) : BaseViewHolder(binding.root) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { + val binding = ListItemReportBinding.inflate( + LayoutInflater.from(context), parent, false + ) + return VH(binding).also { + bindViewClickListener(it, viewType) + } + } + + override fun convert(holder: VH, item: ReportItem) { + val binding = holder.binding + val position = holder.layoutPosition + binding.tvItemName.run { + text = item.name + gravity = Gravity.CENTER_VERTICAL + updateLayoutParams { + gravity = if (item.viewType == 4) Gravity.CENTER_VERTICAL else Gravity.TOP + } + } + binding.divider.run { + if (position == data.size - 1) gone() else visible() + } + when (item.viewType) { + 1 -> { + binding.tvItemValue.gone() + binding.rvReportImage.gone() + binding.etInputValue.let { et -> + et.visible() + et.setText(item.value) + et.hint = item.inputHint + et.isSingleLine = item.isSingleLine + if (item.isSingleLine) { + et.gravity = Gravity.CENTER_VERTICAL + et.setLines(1) + et.updateLayoutParams { height = 50.dp } + } else { + et.gravity = Gravity.TOP + et.setLines(item.inputShowLines) + et.updateLayoutParams { + height = LinearLayout.LayoutParams.WRAP_CONTENT + topMargin = 15.dp + bottomMargin = 15.dp + } + } + } + } + + 2 -> { + binding.rvReportImage.gone() + binding.etInputValue.gone() + binding.tvItemValue.let { tv -> + tv.visible() + tv.text = item.value + tv.setCompoundDrawablesWithIntrinsicBounds( + 0, + 0, + R.drawable.ic_arrow_down_gray, + 0 + ) + tv.updateLayoutParams { + width = LinearLayout.LayoutParams.MATCH_PARENT + } + } + } + + 3 -> { + binding.rvReportImage.gone() + binding.etInputValue.gone() + binding.tvItemValue.let { tv -> + tv.visible() + tv.text = item.value + tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_select_time, 0) + tv.updateLayoutParams { + width = LinearLayout.LayoutParams.WRAP_CONTENT + } + } + } + + 4 -> { + binding.tvItemValue.gone() + binding.etInputValue.gone() + if (item.images == null) { + item.images = mutableListOf() + } + binding.rvReportImage.let { rv -> + rv.visible() + rv.layoutManager = GridLayoutManager(rv.context, 2) + rv.adapter = CommonImageAdapter(item.images!!, 80.dp).also { + it.setOnItemClickListener { adapter, view, position -> + if (it.data[position].isAddFlag.not()) { + return@setOnItemClickListener + } + openGallery(context as BaseActivity, it) + } + } + } + } + } + } + + @SuppressLint("NotifyDataSetChanged") + private fun openGallery(activity: BaseActivity, adapter: CommonImageAdapter) { + StorageUtils.requestPermission(activity) { + GalleryUtils.openGallery(activity) { data -> + val paths = Matisse.obtainPathResult(data) // 获取文件路径列表 + paths?.forEach { path -> + val size = adapter.list.size + adapter.list.add(size - 1, CommonImageBean(imagePath = path)) + } + adapter.notifyDataSetChanged() + } + } + } + +} diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/OtherData.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/OtherData.kt index 8ff5222..208cc6e 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/OtherData.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/OtherData.kt @@ -63,10 +63,10 @@ data class GeoPointMultiItem( var pointName: String = "", var pointDistance: String = "", var totalDistance: String = "", - var baseTopList: MutableList?=null, - var baseBottomList: MutableList?=null, - var images: MutableList?=null -): MultiItemEntity { + var baseTopList: MutableList? = null, + var baseBottomList: MutableList? = null, + var images: MutableList? = null +) : MultiItemEntity { companion object { const val TYPE_BASE_INFO = 1 const val TYPE_LOGGING_INFO = 2 @@ -75,7 +75,19 @@ data class GeoPointMultiItem( } } -data class GeoPointImage( +data class CommonImageBean( var imagePath: String = "", - var isAddFlag:Boolean = false + var isAddFlag: Boolean = false +) + +data class ReportItem( + var name: String = "", + var value: String = "", + var id: String = "", + //1-输入框,2-文本选择弹窗,3-时间选择弹窗,4-上传图片 + var viewType: Int = 0, + var inputHint: String = "", + var inputShowLines: Int = 0, + var isSingleLine: Boolean = true, + var images: MutableList? = null ) \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/superfuntion/ViewExt.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/superfuntion/ViewExt.kt index 2a4bf54..e57cd6e 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/superfuntion/ViewExt.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/superfuntion/ViewExt.kt @@ -207,7 +207,7 @@ fun ImageView.loadCircle(@DrawableRes resourceId: Int) { * @param imageView View * @param placeholder 占位图 */ -fun ImageView.loadRoundedImage( +fun ImageView.loadRoundedImage2( url: String?, roundingRadius: Float, @DrawableRes defaultResId: Int = 0, @@ -239,6 +239,32 @@ fun ImageView.loadRoundedImage( .into(this) } +fun ImageView.loadRoundedImage( + any: Any, + roundingRadius: Float, + @DrawableRes defaultResId: Int = 0, + isCenterCrop:Boolean = true +) { + //设置图片圆角角度 + val roundedCorners = RoundedCorners(dp2px(roundingRadius)) + val multiTransformation: MultiTransformation = MultiTransformation( + if (isCenterCrop) CenterCrop() else FitCenter(), roundedCorners + ) + val options = RequestOptions + .bitmapTransform(multiTransformation) + if (defaultResId == 0) { + options.placeholder(R.drawable.ic_default) + .error(R.drawable.ic_default) + } else { + options.placeholder(defaultResId) + .error(defaultResId) + } + Glide.with(context) + .load(any) + .apply(options) + .into(this) +} + /** * 加载图片到ImageView * @param imageUrl 图片地址 diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointFragment.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointFragment.kt index 64d85c1..adc2eb1 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointFragment.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointFragment.kt @@ -1,17 +1,14 @@ package com.zmkg.coaloperation.ui.geologging -import android.app.Activity -import android.content.Intent import android.os.Bundle import android.view.View import androidx.recyclerview.widget.LinearLayoutManager -import com.zhihu.matisse.Matisse import com.zmkg.coaloperation.R import com.zmkg.coaloperation.adapter.GeoPointMultiAdapter import com.zmkg.coaloperation.base.BaseVMBFragment import com.zmkg.coaloperation.base.viewmodel.TestViewModel import com.zmkg.coaloperation.bean.BaseItem -import com.zmkg.coaloperation.bean.GeoPointImage +import com.zmkg.coaloperation.bean.CommonImageBean import com.zmkg.coaloperation.bean.GeoPointMultiItem import com.zmkg.coaloperation.databinding.FragmentAddGeologicalPointBinding @@ -40,8 +37,8 @@ class AddGeologicalPointFragment : BaseItem(name = "底板", value = ""), BaseItem(name = "巷顶煤厚", value = ""), ) - val imageList = mutableListOf() - imageList.add(GeoPointImage(isAddFlag = true)) + val imageList = mutableListOf() + imageList.add(CommonImageBean(isAddFlag = true)) geoPointList.run { add( GeoPointMultiItem( @@ -73,21 +70,4 @@ class AddGeologicalPointFragment : } - @Deprecated("Deprecated in Java") - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == IMAGE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { - val uris = Matisse.obtainResult(data) // 获取选中URI列表 - val paths = Matisse.obtainPathResult(data) // 获取文件路径列表 - - geoPointList[3].let { - paths?.forEach { path -> - val size = it.images!!.size - it.images!!.add(size - 1, GeoPointImage(imagePath = path)) - } - } - geoPointAdapter.notifyItemChanged(3) - } - } - } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/adapter/ImageAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/adapter/ImageAdapter.kt index aa6c1a9..b7ed6e3 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/adapter/ImageAdapter.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/adapter/ImageAdapter.kt @@ -1,123 +1,123 @@ -package com.zmkg.coaloperation.ui.report.adapter - -import android.view.View -import com.chad.library.adapter.base.module.LoadMoreModule -import com.chad.library.adapter.base.viewholder.BaseDataBindingHolder -import com.zmkg.coaloperation.R -import com.zmkg.coaloperation.adapter.common.BaseDataBindingAdapter -import com.zmkg.coaloperation.bean.ImageBean -import com.zmkg.coaloperation.databinding.ItemRecycleImageBinding -import com.zmkg.coaloperation.superfuntion.loadRoundedImage -import java.io.File - -class ImageAdapter(var maxNum: Int): BaseDataBindingAdapter( - R.layout.item_recycle_image -), LoadMoreModule { - private var isEditModel = false - private var editImageShow = false - override fun bindViewClickListener( - viewHolder: BaseDataBindingHolder, - viewType: Int - ) { - addChildClickViewIds(R.id.btn_delete) - super.bindViewClickListener(viewHolder, viewType) - } - override fun convert( - holder: BaseDataBindingHolder, - item: ImageBean - ) { - val mBinding = holder.dataBinding - mBinding?.let { - if(item.isAddButton){ - mBinding.ivImage.setImageResource(R.mipmap.upload) - mBinding.btnDelete.visibility = View.GONE - }else{ - if(item.isFilePath){ - mBinding.ivImage.loadRoundedImage(File(item.imageUrl), 5f) - }else{ - mBinding.ivImage.loadRoundedImage(item.imageUrl, 5f, R.drawable.ic_default) - } - if(isEditModel){ - mBinding.btnDelete.visibility = View.VISIBLE - }else{ - mBinding.btnDelete.visibility = View.GONE - } - } - } - } - fun isEditModel(isEdit: Boolean){ - isEditModel = isEdit - notifyDataSetChanged() - if(isEditModel && !editImageShow){ - showAddButton(true) - } - } - - override fun setList(list: Collection?) { - super.setList(list) - if(isEditModel){ - showAddButton(true) - } - } - override fun setNewInstance(list: MutableList?) { - super.setNewInstance(list) - if(isEditModel){ - showAddButton(true) - } - } - - override fun addData(newData: Collection) { - if(isEditModel){ - if(editImageShow){ - var lastPosition = data.size - 1 - if(lastPosition < 0){ - lastPosition = 0 - } - addData(lastPosition, newData) - }else{ - showAddButton(true) - } - if(data.size > maxNum){ - showAddButton(false) - } - }else{ - super.addData(newData) - } - } - - override fun removeAt(position: Int) { - super.removeAt(position) - if(isEditModel && !editImageShow){ - showAddButton(true) - } - } - fun getImageList(): MutableList{ - var list = mutableListOf() - data.forEach { imageBean -> - if(!imageBean.isAddButton){ - list.add(imageBean) - } - } - return list - } - fun getImageSize(): Int { - if(isEditModel && editImageShow){ - return getDefItemCount() - 1 - } - return getDefItemCount() - } - - /** - * 显示添加图片按钮 - * @param isShow true为显示 false为隐藏 - */ - private fun showAddButton(isShow: Boolean){ - editImageShow = if(isShow){ - addData(ImageBean(isAddButton = true)) - true - }else{ - removeAt(data.size-1) - false - } - } -} \ No newline at end of file +//package com.zmkg.coaloperation.ui.report.adapter +// +//import android.view.View +//import com.chad.library.adapter.base.module.LoadMoreModule +//import com.chad.library.adapter.base.viewholder.BaseDataBindingHolder +//import com.zmkg.coaloperation.R +//import com.zmkg.coaloperation.adapter.common.BaseDataBindingAdapter +//import com.zmkg.coaloperation.bean.ImageBean +//import com.zmkg.coaloperation.databinding.ItemRecycleImageBinding +//import com.zmkg.coaloperation.superfuntion.loadRoundedImage +//import java.io.File +// +//class ImageAdapter(var maxNum: Int): BaseDataBindingAdapter( +// R.layout.item_recycle_image +//), LoadMoreModule { +// private var isEditModel = false +// private var editImageShow = false +// override fun bindViewClickListener( +// viewHolder: BaseDataBindingHolder, +// viewType: Int +// ) { +// addChildClickViewIds(R.id.btn_delete) +// super.bindViewClickListener(viewHolder, viewType) +// } +// override fun convert( +// holder: BaseDataBindingHolder, +// item: ImageBean +// ) { +// val mBinding = holder.dataBinding +// mBinding?.let { +// if(item.isAddButton){ +// mBinding.ivImage.setImageResource(R.mipmap.upload) +// mBinding.btnDelete.visibility = View.GONE +// }else{ +// if(item.isFilePath){ +// mBinding.ivImage.loadRoundedImage(File(item.imageUrl), 5f) +// }else{ +// mBinding.ivImage.loadRoundedImage(item.imageUrl, 5f, R.drawable.ic_default) +// } +// if(isEditModel){ +// mBinding.btnDelete.visibility = View.VISIBLE +// }else{ +// mBinding.btnDelete.visibility = View.GONE +// } +// } +// } +// } +// fun isEditModel(isEdit: Boolean){ +// isEditModel = isEdit +// notifyDataSetChanged() +// if(isEditModel && !editImageShow){ +// showAddButton(true) +// } +// } +// +// override fun setList(list: Collection?) { +// super.setList(list) +// if(isEditModel){ +// showAddButton(true) +// } +// } +// override fun setNewInstance(list: MutableList?) { +// super.setNewInstance(list) +// if(isEditModel){ +// showAddButton(true) +// } +// } +// +// override fun addData(newData: Collection) { +// if(isEditModel){ +// if(editImageShow){ +// var lastPosition = data.size - 1 +// if(lastPosition < 0){ +// lastPosition = 0 +// } +// addData(lastPosition, newData) +// }else{ +// showAddButton(true) +// } +// if(data.size > maxNum){ +// showAddButton(false) +// } +// }else{ +// super.addData(newData) +// } +// } +// +// override fun removeAt(position: Int) { +// super.removeAt(position) +// if(isEditModel && !editImageShow){ +// showAddButton(true) +// } +// } +// fun getImageList(): MutableList{ +// var list = mutableListOf() +// data.forEach { imageBean -> +// if(!imageBean.isAddButton){ +// list.add(imageBean) +// } +// } +// return list +// } +// fun getImageSize(): Int { +// if(isEditModel && editImageShow){ +// return getDefItemCount() - 1 +// } +// return getDefItemCount() +// } +// +// /** +// * 显示添加图片按钮 +// * @param isShow true为显示 false为隐藏 +// */ +// private fun showAddButton(isShow: Boolean){ +// editImageShow = if(isShow){ +// addData(ImageBean(isAddButton = true)) +// true +// }else{ +// removeAt(data.size-1) +// false +// } +// } +//} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/fragment/Report2Fragment.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/fragment/Report2Fragment.kt new file mode 100644 index 0000000..81f893a --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/fragment/Report2Fragment.kt @@ -0,0 +1,79 @@ +package com.zmkg.coaloperation.ui.report.fragment + +import android.os.Bundle +import android.view.View +import android.widget.RelativeLayout +import androidx.core.view.updateLayoutParams +import androidx.recyclerview.widget.LinearLayoutManager +import com.zmkg.coaloperation.R +import com.zmkg.coaloperation.adapter.ReportAdapter +import com.zmkg.coaloperation.base.BaseVMBFragment +import com.zmkg.coaloperation.bean.CommonImageBean +import com.zmkg.coaloperation.bean.ReportItem +import com.zmkg.coaloperation.databinding.FragmentReport2Binding +import com.zmkg.coaloperation.ui.report.viewmodel.ReportViewModel +import com.zmkg.coaloperation.utils.dp +import com.zmkg.coaloperation.utils.gone + +class Report2Fragment : + BaseVMBFragment(R.layout.fragment_report2) { + + lateinit var pageStatus: PageStatus + + enum class PageStatus(val status: Int) { + ADD(1), + EDIT(2), + SEE(3), + NO_EDIT(4) + } + + private val reportItemList = mutableListOf( + ReportItem(viewType = 2, name = "上报类型"), + ReportItem(viewType = 2, name = "上报区域"), + ReportItem(viewType = 1, name = "上报地点", isSingleLine = true, inputHint = "请输入"), + ReportItem(viewType = 1, name = "上报描述", isSingleLine = true, inputHint = "请输入"), + ReportItem(viewType = 3, name = "上报时间"), + ReportItem(viewType = 2, name = "处理状态"), + ReportItem(viewType = 2, name = "上报人"), + ReportItem(viewType = 2, name = "处理人"), + ReportItem(viewType = 1, name = "处理策略", isSingleLine = false, inputShowLines = 4, inputHint = "请输入"), + ReportItem(viewType = 1, name = "处理结果", isSingleLine = false, inputShowLines = 4, inputHint = "请输入"), + ReportItem(viewType = 3, name = "处理时间"), + ReportItem(viewType = 4, name = "上传图片", images = mutableListOf( + CommonImageBean(isAddFlag = true) + )), + ReportItem(viewType = 1, name = "备注", isSingleLine = false, inputShowLines = 6 ,inputHint = "请输入备注信息,120字以内"), + ) + private val reportAdapter by lazy { + ReportAdapter(reportItemList) + } + + override fun initView(root: View?, savedInstanceState: Bundle?) { + mBinding.toolbarLay.title = "新增临时上报" + mBinding.toolbarLay.rightText = "查看记录" + mBinding.toolbarLay.titleIvBack.gone() + mBinding.toolbarLay.titleTvName.updateLayoutParams { + leftMargin = 20.dp + } + mBinding.rvReport.let { + it.layoutManager = LinearLayoutManager(it.context) + it.adapter = reportAdapter + } + } + + + override fun bindEvent() { + } + + override fun onClick(v: View?) { + } + + override fun transparentStatusBar(): Boolean { + return true + } + + override fun createObserve() { + super.createObserve() + } + +} diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/fragment/ReportFragment.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/fragment/ReportFragment.kt index 705564f..cdc15b5 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/fragment/ReportFragment.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/report/fragment/ReportFragment.kt @@ -1,204 +1,204 @@ -package com.zmkg.coaloperation.ui.report.fragment - -import android.os.Bundle -import android.view.View -import androidx.core.view.ViewCompat -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle -import androidx.recyclerview.widget.GridLayoutManager -import com.chad.library.adapter.base.BaseQuickAdapter -import com.chad.library.adapter.base.listener.OnItemChildClickListener -import com.chad.library.adapter.base.listener.OnItemClickListener -import com.luck.picture.lib.basic.PictureSelectionModel -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.config.SelectModeConfig -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener -import com.luck.picture.lib.utils.SandboxTransformUtils -import com.zmkg.coaloperation.utils.pictureSelector.ImageFileCompressEngine -import com.zmkg.coaloperation.R -import com.zmkg.coaloperation.base.BaseActivity -import com.zmkg.coaloperation.base.BaseVMBFragment -import com.zmkg.coaloperation.bean.ImageBean -import com.zmkg.coaloperation.databinding.FragmentReportBinding -import com.zmkg.coaloperation.ui.report.adapter.ImageAdapter -import com.zmkg.coaloperation.ui.report.viewmodel.ReportViewModel -import com.zmkg.coaloperation.utils.permission.StorageUtils -import com.zmkg.coaloperation.utils.pictureSelector.GlideEngine -import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.launch - -class ReportFragment : - BaseVMBFragment(R.layout.fragment_report), - OnItemClickListener, OnItemChildClickListener { - - private val imageAdapter by lazy { ImageAdapter(maxImageNum) } - lateinit var pageStatus: PageStatus - - companion object { - const val maxImageNum = 5 - } - - override fun initView(root: View?, savedInstanceState: Bundle?) { - - mBinding.apply { - val gridLayoutManager = GridLayoutManager(context, 3) - layInspectionReport.rvList.layoutManager = gridLayoutManager - imageAdapter.setOnItemClickListener(this@ReportFragment) - imageAdapter.setOnItemChildClickListener(this@ReportFragment) - mBinding.layInspectionReport.rvList.adapter = imageAdapter - ViewCompat.setNestedScrollingEnabled(layInspectionReport.rvList, false) - } - - setPageModel(PageStatus.ADD) - - } - - enum class PageStatus(val status: Int) { - ADD(1), - EDIT(2), - SEE(3), - NO_EDIT(4) - } - - private fun setPageModel(status: PageStatus) { - this.pageStatus = status - mBinding?.apply { - when (status) { - PageStatus.ADD -> { - lifecycleScope.launch { - mViewModel.noEdit.emit(false) - } - } - - PageStatus.EDIT -> { - lifecycleScope.launch { - mViewModel.noEdit.emit(false) - } - - } - - PageStatus.SEE -> { - lifecycleScope.launch { - mViewModel.noEdit.emit(true) - } - } - - PageStatus.NO_EDIT -> { - lifecycleScope.launch { - mViewModel.noEdit.emit(true) - } - } - } - } - } - - - override fun bindEvent() { - } - - override fun onClick(v: View?) { - } - - override fun transparentStatusBar(): Boolean { - return true - } - - override fun createObserve() { - super.createObserve() - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.CREATED) { - mViewModel.noEdit.collectLatest { noEdit -> - mBinding.apply { - imageAdapter.isEditModel(!noEdit) - } - } - } - } - } - - override fun onItemClick(adapter: BaseQuickAdapter<*, *>, view: View, position: Int) { - val imageBean: ImageBean = adapter.getItem(position) as ImageBean - imageBean?.let { it -> - if (it.isAddButton) { - StorageUtils.requestPermission(context as BaseActivity) { - initPictureSelectorModel() - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList?) { - result?.let { list -> - var resultList = localMediaToImageList(list) - imageAdapter.addData(resultList) - setImageNum(imageAdapter.getImageSize()) - } - } - - override fun onCancel() {} - }) - } - } else { -// startFullScreenImageActivity( -// it.isFilePath, -// it.imageUrl -// ) - } - } - } - - fun setImageNum(size: Int) { - mBinding.layInspectionReport.tvImageNum.text = getString( - R.string.image_list_num, - size, - maxImageNum - ) - } - - private fun initPictureSelectorModel(): PictureSelectionModel { - return PictureSelector.create(this) - .openGallery(SelectMimeType.TYPE_IMAGE) - .setSelectionMode(SelectModeConfig.MULTIPLE) - .setMaxSelectNum(maxImageNum - imageAdapter.getImageSize()) - .setCompressEngine(ImageFileCompressEngine()) - .setImageEngine(GlideEngine.createGlideEngine()) - .setSandboxFileEngine { context, srcPath, mineType, call -> - if (call != null) { - var sandboxPath = - SandboxTransformUtils.copyPathToSandbox(context, srcPath, mineType) - call.onCallback(srcPath, sandboxPath) - } - } - } - - - - - override fun onItemChildClick(adapter: BaseQuickAdapter<*, *>, view: View, position: Int) { - adapter.removeAt(position) - } - - fun localMediaToImageList(result: ArrayList): MutableList { - var imageList = mutableListOf() - var imageBean: ImageBean - result.forEach { - it?.let { - imageBean = ImageBean(getImagePath(it), true) - imageList.add(imageBean) - } - } - return imageList - } - - private fun getImagePath(localMedia: LocalMedia): String { - if (!localMedia.cutPath.isNullOrEmpty()) { - return localMedia.cutPath - } - if (!localMedia.compressPath.isNullOrEmpty()) { - return localMedia.compressPath - } - if (!localMedia.sandboxPath.isNullOrEmpty()) { - return localMedia.sandboxPath - } - return localMedia.path - } -} +//package com.zmkg.coaloperation.ui.report.fragment +// +//import android.os.Bundle +//import android.view.View +//import androidx.core.view.ViewCompat +//import androidx.lifecycle.Lifecycle +//import androidx.lifecycle.lifecycleScope +//import androidx.lifecycle.repeatOnLifecycle +//import androidx.recyclerview.widget.GridLayoutManager +//import com.chad.library.adapter.base.BaseQuickAdapter +//import com.chad.library.adapter.base.listener.OnItemChildClickListener +//import com.chad.library.adapter.base.listener.OnItemClickListener +//import com.luck.picture.lib.basic.PictureSelectionModel +//import com.luck.picture.lib.basic.PictureSelector +//import com.luck.picture.lib.config.SelectMimeType +//import com.luck.picture.lib.config.SelectModeConfig +//import com.luck.picture.lib.entity.LocalMedia +//import com.luck.picture.lib.interfaces.OnResultCallbackListener +//import com.luck.picture.lib.utils.SandboxTransformUtils +//import com.zmkg.coaloperation.utils.pictureSelector.ImageFileCompressEngine +//import com.zmkg.coaloperation.R +//import com.zmkg.coaloperation.base.BaseActivity +//import com.zmkg.coaloperation.base.BaseVMBFragment +//import com.zmkg.coaloperation.bean.ImageBean +//import com.zmkg.coaloperation.databinding.FragmentReportBinding +//import com.zmkg.coaloperation.ui.report.adapter.ImageAdapter +//import com.zmkg.coaloperation.ui.report.viewmodel.ReportViewModel +//import com.zmkg.coaloperation.utils.permission.StorageUtils +//import com.zmkg.coaloperation.utils.pictureSelector.GlideEngine +//import kotlinx.coroutines.flow.collectLatest +//import kotlinx.coroutines.launch +// +//class ReportFragment : +// BaseVMBFragment(R.layout.fragment_report), +// OnItemClickListener, OnItemChildClickListener { +// +// private val imageAdapter by lazy { ImageAdapter(maxImageNum) } +// lateinit var pageStatus: PageStatus +// +// companion object { +// const val maxImageNum = 5 +// } +// +// override fun initView(root: View?, savedInstanceState: Bundle?) { +// +// mBinding.apply { +// val gridLayoutManager = GridLayoutManager(context, 3) +// layInspectionReport.rvList.layoutManager = gridLayoutManager +// imageAdapter.setOnItemClickListener(this@ReportFragment) +// imageAdapter.setOnItemChildClickListener(this@ReportFragment) +// mBinding.layInspectionReport.rvList.adapter = imageAdapter +// ViewCompat.setNestedScrollingEnabled(layInspectionReport.rvList, false) +// } +// +// setPageModel(PageStatus.ADD) +// +// } +// +// enum class PageStatus(val status: Int) { +// ADD(1), +// EDIT(2), +// SEE(3), +// NO_EDIT(4) +// } +// +// private fun setPageModel(status: PageStatus) { +// this.pageStatus = status +// mBinding?.apply { +// when (status) { +// PageStatus.ADD -> { +// lifecycleScope.launch { +// mViewModel.noEdit.emit(false) +// } +// } +// +// PageStatus.EDIT -> { +// lifecycleScope.launch { +// mViewModel.noEdit.emit(false) +// } +// +// } +// +// PageStatus.SEE -> { +// lifecycleScope.launch { +// mViewModel.noEdit.emit(true) +// } +// } +// +// PageStatus.NO_EDIT -> { +// lifecycleScope.launch { +// mViewModel.noEdit.emit(true) +// } +// } +// } +// } +// } +// +// +// override fun bindEvent() { +// } +// +// override fun onClick(v: View?) { +// } +// +// override fun transparentStatusBar(): Boolean { +// return true +// } +// +// override fun createObserve() { +// super.createObserve() +// lifecycleScope.launch { +// repeatOnLifecycle(Lifecycle.State.CREATED) { +// mViewModel.noEdit.collectLatest { noEdit -> +// mBinding.apply { +// imageAdapter.isEditModel(!noEdit) +// } +// } +// } +// } +// } +// +// override fun onItemClick(adapter: BaseQuickAdapter<*, *>, view: View, position: Int) { +// val imageBean: ImageBean = adapter.getItem(position) as ImageBean +// imageBean?.let { it -> +// if (it.isAddButton) { +// StorageUtils.requestPermission(context as BaseActivity) { +// initPictureSelectorModel() +// .forResult(object : OnResultCallbackListener { +// override fun onResult(result: ArrayList?) { +// result?.let { list -> +// var resultList = localMediaToImageList(list) +// imageAdapter.addData(resultList) +// setImageNum(imageAdapter.getImageSize()) +// } +// } +// +// override fun onCancel() {} +// }) +// } +// } else { +//// startFullScreenImageActivity( +//// it.isFilePath, +//// it.imageUrl +//// ) +// } +// } +// } +// +// fun setImageNum(size: Int) { +// mBinding.layInspectionReport.tvImageNum.text = getString( +// R.string.image_list_num, +// size, +// maxImageNum +// ) +// } +// +// private fun initPictureSelectorModel(): PictureSelectionModel { +// return PictureSelector.create(this) +// .openGallery(SelectMimeType.TYPE_IMAGE) +// .setSelectionMode(SelectModeConfig.MULTIPLE) +// .setMaxSelectNum(maxImageNum - imageAdapter.getImageSize()) +// .setCompressEngine(ImageFileCompressEngine()) +// .setImageEngine(GlideEngine.createGlideEngine()) +// .setSandboxFileEngine { context, srcPath, mineType, call -> +// if (call != null) { +// var sandboxPath = +// SandboxTransformUtils.copyPathToSandbox(context, srcPath, mineType) +// call.onCallback(srcPath, sandboxPath) +// } +// } +// } +// +// +// +// +// override fun onItemChildClick(adapter: BaseQuickAdapter<*, *>, view: View, position: Int) { +// adapter.removeAt(position) +// } +// +// fun localMediaToImageList(result: ArrayList): MutableList { +// var imageList = mutableListOf() +// var imageBean: ImageBean +// result.forEach { +// it?.let { +// imageBean = ImageBean(getImagePath(it), true) +// imageList.add(imageBean) +// } +// } +// return imageList +// } +// +// private fun getImagePath(localMedia: LocalMedia): String { +// if (!localMedia.cutPath.isNullOrEmpty()) { +// return localMedia.cutPath +// } +// if (!localMedia.compressPath.isNullOrEmpty()) { +// return localMedia.compressPath +// } +// if (!localMedia.sandboxPath.isNullOrEmpty()) { +// return localMedia.sandboxPath +// } +// return localMedia.path +// } +//} diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/GalleryUtils.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/GalleryUtils.kt index 89d34ac..b5d51f4 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/GalleryUtils.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/GalleryUtils.kt @@ -1,20 +1,27 @@ package com.zmkg.coaloperation.utils -import android.app.Activity +import android.content.Intent import android.content.pm.ActivityInfo import com.zhihu.matisse.Matisse import com.zhihu.matisse.MimeType import com.zhihu.matisse.R import com.zhihu.matisse.engine.impl.GlideEngine import com.zhihu.matisse.internal.entity.CaptureStrategy +import com.zmkg.coaloperation.base.BaseActivity object GalleryUtils { - fun openGallery(activity: Activity, requestCode:Int) { + fun openGallery(activity: BaseActivity, action:(Intent)-> Unit) { Matisse.from(activity) - .choose(MimeType.ofImage(),false) // 只选图片 + .choose(MimeType.ofImage(), false) // 只选图片 .capture(true) - .captureStrategy(CaptureStrategy(true, "${activity.packageName}.fileprovider", "coalImage")) + .captureStrategy( + CaptureStrategy( + true, + "${activity.packageName}.fileprovider", + "coalImage" + ) + ) .countable(true) // 显示选中数量 .maxSelectable(9) // 最多选9张 .gridExpectedSize(120.dp) @@ -22,7 +29,13 @@ object GalleryUtils { .thumbnailScale(0.8f) .theme(R.style.Matisse_Dracula) .imageEngine(GlideEngine()) // 必须设置引擎 - .forResult(requestCode) + .forResultLaunch { intent -> + activity.launchActivityResult(intent) { result -> + result.data?.let { + action(it) + } + } + } } } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/drawable-xhdpi/ic_select_time.png b/coalMiningApp/app/src/main/res/drawable-xhdpi/ic_select_time.png new file mode 100644 index 0000000..c89ef3e Binary files /dev/null and b/coalMiningApp/app/src/main/res/drawable-xhdpi/ic_select_time.png differ diff --git a/coalMiningApp/app/src/main/res/layout/fragment_report2.xml b/coalMiningApp/app/src/main/res/layout/fragment_report2.xml new file mode 100644 index 0000000..7ba8d37 --- /dev/null +++ b/coalMiningApp/app/src/main/res/layout/fragment_report2.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/list_item_point_image.xml b/coalMiningApp/app/src/main/res/layout/list_item_common_image.xml similarity index 85% rename from coalMiningApp/app/src/main/res/layout/list_item_point_image.xml rename to coalMiningApp/app/src/main/res/layout/list_item_common_image.xml index 7942b7f..af37b61 100644 --- a/coalMiningApp/app/src/main/res/layout/list_item_point_image.xml +++ b/coalMiningApp/app/src/main/res/layout/list_item_common_image.xml @@ -5,10 +5,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> diff --git a/coalMiningApp/app/src/main/res/layout/list_item_point_upload_image.xml b/coalMiningApp/app/src/main/res/layout/list_item_point_upload_image.xml index c1d1bd0..225dc17 100644 --- a/coalMiningApp/app/src/main/res/layout/list_item_point_upload_image.xml +++ b/coalMiningApp/app/src/main/res/layout/list_item_point_upload_image.xml @@ -29,7 +29,7 @@ app:spanCount="4" android:paddingVertical="5dp" android:orientation="vertical" - tools:listitem="@layout/list_item_point_image" + tools:listitem="@layout/list_item_common_image" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"/> diff --git a/coalMiningApp/app/src/main/res/layout/list_item_report.xml b/coalMiningApp/app/src/main/res/layout/list_item_report.xml new file mode 100644 index 0000000..5599a95 --- /dev/null +++ b/coalMiningApp/app/src/main/res/layout/list_item_report.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coalMiningApp/matisse/src/main/java/com/zhihu/matisse/SelectionCreator.java b/coalMiningApp/matisse/src/main/java/com/zhihu/matisse/SelectionCreator.java index 66aeadf..a52524a 100644 --- a/coalMiningApp/matisse/src/main/java/com/zhihu/matisse/SelectionCreator.java +++ b/coalMiningApp/matisse/src/main/java/com/zhihu/matisse/SelectionCreator.java @@ -38,6 +38,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Set; +import java.util.function.Consumer; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR; @@ -368,4 +369,15 @@ public final class SelectionCreator { mSelectionSpec.showPreview = showPreview; return this; } + + public void forResultLaunch(Consumer consumer) { + Activity activity = mMatisse.getActivity(); + if (activity == null) { + return; + } + Intent intent = new Intent(activity, MatisseActivity.class); + if (consumer!=null) { + consumer.accept(intent); + } + } }