diff --git a/app/build.gradle b/app/build.gradle index 2ef3580..91515db 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,7 +63,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.9' implementation 'androidx.core:core-ktx:1.9.0' def base_version = "1.6.1" implementation "androidx.appcompat:appcompat:${base_version}" diff --git a/app/build.gradle b/app/build.gradle index 2ef3580..91515db 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,7 +63,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.9' implementation 'androidx.core:core-ktx:1.9.0' def base_version = "1.6.1" implementation "androidx.appcompat:appcompat:${base_version}" diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index c050bde..03aeb44 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -67,7 +67,9 @@ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 3) + //左右边距 + val viewWidth = getScreenWidth() - (10 + 10).dp2px(this) + imageAdapter = EditableImageAdapter(this, viewWidth, 1, 3) binding.addImageRecyclerView.adapter = imageAdapter } @@ -177,7 +179,8 @@ override fun onItemLongClick(view: View?, position: Int) { imagePaths.removeAt(position) - imageAdapter.deleteImage(position) + realPaths.removeAt(position) + imageAdapter.notifyImageItemRemoved(realPaths) } }) @@ -188,7 +191,7 @@ imagePaths.add(url) realPaths.add(url.combineImagePath()) } - imageAdapter.setupImage(realPaths) + imageAdapter.notifyImageItemRangeInserted(realPaths) } } @@ -250,16 +253,6 @@ } private fun analyticalSelectResults(result: LocalMedia) { - //压缩图片 -// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { -// result.realPath -// } else { -// result.sandboxPath -// } -// Log.d(kTag, "初始路径:" + result.path) -// Log.d(kTag, "绝对路径:" + result.realPath) -// Log.d(kTag, "原图路径:" + result.originalPath) -// Log.d(kTag, "沙盒路径:" + result.sandboxPath) result.realPath.compressImage(this, object : OnImageCompressListener { override fun onSuccess(file: File) { Log.d(kTag, "onSuccess: " + file.absolutePath) diff --git a/app/build.gradle b/app/build.gradle index 2ef3580..91515db 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,7 +63,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.8' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.9' implementation 'androidx.core:core-ktx:1.9.0' def base_version = "1.6.1" implementation "androidx.appcompat:appcompat:${base_version}" diff --git a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt index c050bde..03aeb44 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/ApplyEnterActivity.kt @@ -67,7 +67,9 @@ uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] applyViewModel = ViewModelProvider(this)[ApplyViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 1, 3) + //左右边距 + val viewWidth = getScreenWidth() - (10 + 10).dp2px(this) + imageAdapter = EditableImageAdapter(this, viewWidth, 1, 3) binding.addImageRecyclerView.adapter = imageAdapter } @@ -177,7 +179,8 @@ override fun onItemLongClick(view: View?, position: Int) { imagePaths.removeAt(position) - imageAdapter.deleteImage(position) + realPaths.removeAt(position) + imageAdapter.notifyImageItemRemoved(realPaths) } }) @@ -188,7 +191,7 @@ imagePaths.add(url) realPaths.add(url.combineImagePath()) } - imageAdapter.setupImage(realPaths) + imageAdapter.notifyImageItemRangeInserted(realPaths) } } @@ -250,16 +253,6 @@ } private fun analyticalSelectResults(result: LocalMedia) { - //压缩图片 -// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { -// result.realPath -// } else { -// result.sandboxPath -// } -// Log.d(kTag, "初始路径:" + result.path) -// Log.d(kTag, "绝对路径:" + result.realPath) -// Log.d(kTag, "原图路径:" + result.originalPath) -// Log.d(kTag, "沙盒路径:" + result.sandboxPath) result.realPath.compressImage(this, object : OnImageCompressListener { override fun onSuccess(file: File) { Log.d(kTag, "onSuccess: " + file.absolutePath) diff --git a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt index 0e16576..debc81f 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/UploadEventActivity.kt @@ -1,14 +1,12 @@ package com.casic.br.operationsite.view -import android.content.Context import android.os.Bundle -import android.os.CountDownTimer -import android.os.Handler import android.text.Editable import android.text.TextWatcher import android.util.Log import android.view.View import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope import com.amap.api.location.AMapLocation import com.casic.br.operationsite.R import com.casic.br.operationsite.callback.OnImageCompressListener @@ -31,26 +29,31 @@ import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub import com.pengxh.kt.lite.utils.SaveKeyValues -import com.pengxh.kt.lite.utils.WeakReferenceHandler import com.pengxh.kt.lite.widget.TitleBarView import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.launch import java.io.File class UploadEventActivity : KotlinBaseActivity() { private val kTag = "UploadEventActivity" private lateinit var imageAdapter: EditableImageAdapter - private lateinit var weakReferenceHandler: WeakReferenceHandler private lateinit var uploadFileViewModel: UploadFileViewModel private lateinit var eventViewModel: EventViewModel - private val context: Context = this@UploadEventActivity + private val context = this + private val marginOffset by lazy { 2.dp2px(this) } private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 private var mapLocation: AMapLocation? = null @@ -83,11 +86,15 @@ binding.personNumberView.text = userDetail.phone } - weakReferenceHandler = WeakReferenceHandler(callback) uploadFileViewModel = ViewModelProvider(this)[UploadFileViewModel::class.java] eventViewModel = ViewModelProvider(this)[EventViewModel::class.java] - imageAdapter = EditableImageAdapter(this, 3, 3) + //左右边距 + val viewWidth = getScreenWidth() - (10 + 10).dp2px(this) + imageAdapter = EditableImageAdapter(this, viewWidth, 3, 3) + binding.addImageRecyclerView.addItemDecoration( + RecyclerViewItemOffsets(marginOffset, marginOffset, marginOffset, marginOffset) + ) binding.addImageRecyclerView.adapter = imageAdapter } @@ -130,23 +137,17 @@ override fun onItemLongClick(view: View?, position: Int) { imagePaths.removeAt(position) - imageAdapter.deleteImage(position) + realPaths.removeAt(position) + imageAdapter.notifyImageItemRemoved(realPaths) } }) uploadFileViewModel.resultModel.observe(this) { if (it.code == 200) { - val sumItemCount = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 4) { - val url = it.data.toString() - if (url.isNotBlank()) { - imagePaths.add(url) - realPaths.add(url.combineImagePath()) - } - imageAdapter.setupImage(realPaths) - } else { - "最多只能上传3张图片".show(this) - } + val url = it.data.toString() + imagePaths.add(url) + realPaths.add(url.combineImagePath()) + imageAdapter.notifyImageItemRangeInserted(realPaths) } } @@ -222,7 +223,7 @@ "拍照保存失败,请重试".show(context) return } - analyticalSelectResults(result[0]) + analyticalSelectResults(result.first()) } override fun onCancel() { @@ -238,25 +239,16 @@ .setImageEngine(GlideLoadEngine.get) .forResult(object : OnResultCallbackListener { override fun onResult(result: ArrayList?) { - if (result == null) { - "选择照片失败,请重试".show(context) - return + lifecycleScope.launch { + flow { + result?.forEach { + emit(it) + delay(1000) + } + }.collect { + analyticalSelectResults(it) + } } - // 线程控制图片压缩上传过程,防止速度过快导致压缩失败 - val sum = (result.size * 500).toLong() - object : CountDownTimer(sum, 500) { - override fun onTick(millisUntilFinished: Long) { - val i = millisUntilFinished / 500 - val message = weakReferenceHandler.obtainMessage() - message.obj = result[i.toInt()] - message.what = 2022071301 - weakReferenceHandler.handleMessage(message) - } - - override fun onFinish() { - - } - }.start() } override fun onCancel() { @@ -269,13 +261,6 @@ }).build().show() } - private val callback = Handler.Callback { - if (it.what == 2022071301) { - analyticalSelectResults(it.obj as LocalMedia) - } - true - } - private fun getCurrentLocation() { binding.eventLocationView.text = "定位中..." LocationHelper.getCurrentLocation(this, object : LocationHelper.ILocationListener {