diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt index 4916c38..a8389da 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt @@ -84,7 +84,7 @@ container.addView(view) //点击大图取消预览 photoView.setOnClickListener { - PageNavigationManager.finishActivity(BigImageActivity::class.java) + PageNavigationManager.currentActivity()?.finish() } return view } diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt index 4916c38..a8389da 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt @@ -84,7 +84,7 @@ container.addView(view) //点击大图取消预览 photoView.setOnClickListener { - PageNavigationManager.finishActivity(BigImageActivity::class.java) + PageNavigationManager.currentActivity()?.finish() } return view } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index f9598e8..a5a1c74 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity import com.casic.birmm.inspect.extensions.show @@ -17,6 +16,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.include_base_title.* @@ -73,19 +73,22 @@ ) SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 } else { - AlertView( - "温馨提示", "获取用户信息失败,是否重试?", "是", arrayOf("否"), - null, this, AlertView.Style.Alert - ) { _, position -> - when (position) { - -1 -> { - this.finish() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("获取用户信息失败,是否重试?") + .setNegativeButton("否") + .setPositiveButton("是") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + } - 0 -> { + + override fun onConfirmClick() { obtainUserInfo() } - } - }.show() + }).build().show() } }) } diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt index 4916c38..a8389da 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt @@ -84,7 +84,7 @@ container.addView(view) //点击大图取消预览 photoView.setOnClickListener { - PageNavigationManager.finishActivity(BigImageActivity::class.java) + PageNavigationManager.currentActivity()?.finish() } return view } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index f9598e8..a5a1c74 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity import com.casic.birmm.inspect.extensions.show @@ -17,6 +16,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.include_base_title.* @@ -73,19 +73,22 @@ ) SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 } else { - AlertView( - "温馨提示", "获取用户信息失败,是否重试?", "是", arrayOf("否"), - null, this, AlertView.Style.Alert - ) { _, position -> - when (position) { - -1 -> { - this.finish() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("获取用户信息失败,是否重试?") + .setNegativeButton("否") + .setPositiveButton("是") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + } - 0 -> { + + override fun onConfirmClick() { obtainUserInfo() } - } - }.show() + }).build().show() } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt index a09ab5e..d6bff66 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt @@ -15,7 +15,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -37,6 +36,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_inspect_route.mapView @@ -179,14 +179,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -326,15 +334,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt index 4916c38..a8389da 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt @@ -84,7 +84,7 @@ container.addView(view) //点击大图取消预览 photoView.setOnClickListener { - PageNavigationManager.finishActivity(BigImageActivity::class.java) + PageNavigationManager.currentActivity()?.finish() } return view } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index f9598e8..a5a1c74 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity import com.casic.birmm.inspect.extensions.show @@ -17,6 +16,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.include_base_title.* @@ -73,19 +73,22 @@ ) SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 } else { - AlertView( - "温馨提示", "获取用户信息失败,是否重试?", "是", arrayOf("否"), - null, this, AlertView.Style.Alert - ) { _, position -> - when (position) { - -1 -> { - this.finish() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("获取用户信息失败,是否重试?") + .setNegativeButton("否") + .setPositiveButton("是") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + } - 0 -> { + + override fun onConfirmClick() { obtainUserInfo() } - } - }.show() + }).build().show() } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt index a09ab5e..d6bff66 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt @@ -15,7 +15,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -37,6 +36,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_inspect_route.mapView @@ -179,14 +179,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -326,15 +334,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt index 5cb5c7e..06947ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt @@ -6,10 +6,9 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView -import com.aihook.alertview.library.OnItemClickListener +import androidx.recyclerview.widget.GridLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.ImageGridViewAdapter +import com.casic.birmm.inspect.adapter.NineGridImageAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.* import com.casic.birmm.inspect.model.UserInfoModel @@ -21,6 +20,7 @@ import com.luck.picture.lib.PictureSelector import com.luck.picture.lib.config.PictureConfig import com.luck.picture.lib.config.PictureMimeType +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_new_event.* import kotlinx.android.synthetic.main.include_base_title.* import java.io.File @@ -31,7 +31,7 @@ private lateinit var uploadImageViewModel: UploadImageViewModel private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 - private lateinit var imageAdapter: ImageGridViewAdapter + private lateinit var imageAdapter: NineGridImageAdapter private var isWarning: Boolean = true private lateinit var inspectionId: String private lateinit var inspectionName: String @@ -71,82 +71,47 @@ TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()) //初始化图片九宫格 - imageAdapter = ImageGridViewAdapter(this) - imageGridView.adapter = imageAdapter + imageAdapter = NineGridImageAdapter(this) + nineRecyclerView.layoutManager = GridLayoutManager(this, 3) + nineRecyclerView.adapter = imageAdapter } override fun initEvent() { leftBackView.setOnClickListener { this.finish() } - addImageView.setOnClickListener { - AlertView( - "请选择图片来源", null, "取消", null, arrayOf("拍照", "相册"), - this, AlertView.Style.ActionSheet - ) { _, position -> - when (position) { - 0 -> { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .forResult(PictureConfig.REQUEST_CAMERA) - } - 1 -> { - PictureSelector.create(this) - .openGallery(PictureMimeType.ofImage()) - .isWeChatStyle(true) - .isCamera(false) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) - .forResult(PictureConfig.CHOOSE_REQUEST) - } + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@NewEventActivity) + } else { + OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) } - }.setCancelable(true).show() - } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) uploadImageViewModel.resultModel.observe(this, Observer { model -> if (model.code == 200) { /** * 显示图片 * path: 2021-07\c670eac17d644b179a4324a34bb84329.jpeg * */ - imageGridView.visibility = View.VISIBLE - val sumItemCount: Int = imageAdapter.count + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 3) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { val url = model.data //let函数处理需要针对一个可null的对象统一做判空处理。 url?.let { imagePaths.add(it) realPaths.add(it.combineImagePath()) } - if (realPaths.size == 3) { - addImageView.visibility = View.GONE - } - imageAdapter.setImageList(imageUrls = realPaths) - imageGridView.setOnItemClickListener { _, _, position, _ -> - if (realPaths[position].isEmpty()) { - "图片加载失败,无法查看大图".show(this@NewEventActivity) - } else { - OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) - } - } - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(object : - ImageGridViewAdapter.OnDeleteItemClickListener { - @Override - override fun onDeleteItemClick(position: Int) { - imagePaths.removeAt(position) - realPaths.removeAt(position) - imageAdapter.setImageList(imageUrls = realPaths) - if (realPaths.size != 3) { - addImageView.visibility = View.VISIBLE - } - } - }) + imageAdapter.setupImage(images = realPaths) } else { "最多只能上传3张图片".show(this) } @@ -205,6 +170,35 @@ }) } + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitles(arrayOf("拍照", "相册")) + .setOnActionSheetListener { position -> + when (position) { + 0 -> { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .forResult(PictureConfig.REQUEST_CAMERA) + } + 1 -> { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .isWeChatStyle(true) + .isCamera(false) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .forResult(PictureConfig.CHOOSE_REQUEST) + } + } + }.build().show() + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt index 4916c38..a8389da 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt @@ -84,7 +84,7 @@ container.addView(view) //点击大图取消预览 photoView.setOnClickListener { - PageNavigationManager.finishActivity(BigImageActivity::class.java) + PageNavigationManager.currentActivity()?.finish() } return view } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index f9598e8..a5a1c74 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity import com.casic.birmm.inspect.extensions.show @@ -17,6 +16,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.include_base_title.* @@ -73,19 +73,22 @@ ) SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 } else { - AlertView( - "温馨提示", "获取用户信息失败,是否重试?", "是", arrayOf("否"), - null, this, AlertView.Style.Alert - ) { _, position -> - when (position) { - -1 -> { - this.finish() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("获取用户信息失败,是否重试?") + .setNegativeButton("否") + .setPositiveButton("是") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + } - 0 -> { + + override fun onConfirmClick() { obtainUserInfo() } - } - }.show() + }).build().show() } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt index a09ab5e..d6bff66 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt @@ -15,7 +15,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -37,6 +36,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_inspect_route.mapView @@ -179,14 +179,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -326,15 +334,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt index 5cb5c7e..06947ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt @@ -6,10 +6,9 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView -import com.aihook.alertview.library.OnItemClickListener +import androidx.recyclerview.widget.GridLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.ImageGridViewAdapter +import com.casic.birmm.inspect.adapter.NineGridImageAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.* import com.casic.birmm.inspect.model.UserInfoModel @@ -21,6 +20,7 @@ import com.luck.picture.lib.PictureSelector import com.luck.picture.lib.config.PictureConfig import com.luck.picture.lib.config.PictureMimeType +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_new_event.* import kotlinx.android.synthetic.main.include_base_title.* import java.io.File @@ -31,7 +31,7 @@ private lateinit var uploadImageViewModel: UploadImageViewModel private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 - private lateinit var imageAdapter: ImageGridViewAdapter + private lateinit var imageAdapter: NineGridImageAdapter private var isWarning: Boolean = true private lateinit var inspectionId: String private lateinit var inspectionName: String @@ -71,82 +71,47 @@ TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()) //初始化图片九宫格 - imageAdapter = ImageGridViewAdapter(this) - imageGridView.adapter = imageAdapter + imageAdapter = NineGridImageAdapter(this) + nineRecyclerView.layoutManager = GridLayoutManager(this, 3) + nineRecyclerView.adapter = imageAdapter } override fun initEvent() { leftBackView.setOnClickListener { this.finish() } - addImageView.setOnClickListener { - AlertView( - "请选择图片来源", null, "取消", null, arrayOf("拍照", "相册"), - this, AlertView.Style.ActionSheet - ) { _, position -> - when (position) { - 0 -> { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .forResult(PictureConfig.REQUEST_CAMERA) - } - 1 -> { - PictureSelector.create(this) - .openGallery(PictureMimeType.ofImage()) - .isWeChatStyle(true) - .isCamera(false) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) - .forResult(PictureConfig.CHOOSE_REQUEST) - } + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@NewEventActivity) + } else { + OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) } - }.setCancelable(true).show() - } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) uploadImageViewModel.resultModel.observe(this, Observer { model -> if (model.code == 200) { /** * 显示图片 * path: 2021-07\c670eac17d644b179a4324a34bb84329.jpeg * */ - imageGridView.visibility = View.VISIBLE - val sumItemCount: Int = imageAdapter.count + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 3) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { val url = model.data //let函数处理需要针对一个可null的对象统一做判空处理。 url?.let { imagePaths.add(it) realPaths.add(it.combineImagePath()) } - if (realPaths.size == 3) { - addImageView.visibility = View.GONE - } - imageAdapter.setImageList(imageUrls = realPaths) - imageGridView.setOnItemClickListener { _, _, position, _ -> - if (realPaths[position].isEmpty()) { - "图片加载失败,无法查看大图".show(this@NewEventActivity) - } else { - OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) - } - } - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(object : - ImageGridViewAdapter.OnDeleteItemClickListener { - @Override - override fun onDeleteItemClick(position: Int) { - imagePaths.removeAt(position) - realPaths.removeAt(position) - imageAdapter.setImageList(imageUrls = realPaths) - if (realPaths.size != 3) { - addImageView.visibility = View.VISIBLE - } - } - }) + imageAdapter.setupImage(images = realPaths) } else { "最多只能上传3张图片".show(this) } @@ -205,6 +170,35 @@ }) } + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitles(arrayOf("拍照", "相册")) + .setOnActionSheetListener { position -> + when (position) { + 0 -> { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .forResult(PictureConfig.REQUEST_CAMERA) + } + 1 -> { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .isWeChatStyle(true) + .isCamera(false) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .forResult(PictureConfig.CHOOSE_REQUEST) + } + } + }.build().show() + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { diff --git a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt index 2d03157..4bba338 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt @@ -12,7 +12,6 @@ import android.os.Vibrator import android.util.Log import androidx.core.content.ContextCompat -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -33,6 +32,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_map.* @@ -153,14 +153,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -275,15 +283,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt index 4916c38..a8389da 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt @@ -84,7 +84,7 @@ container.addView(view) //点击大图取消预览 photoView.setOnClickListener { - PageNavigationManager.finishActivity(BigImageActivity::class.java) + PageNavigationManager.currentActivity()?.finish() } return view } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index f9598e8..a5a1c74 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity import com.casic.birmm.inspect.extensions.show @@ -17,6 +16,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.include_base_title.* @@ -73,19 +73,22 @@ ) SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 } else { - AlertView( - "温馨提示", "获取用户信息失败,是否重试?", "是", arrayOf("否"), - null, this, AlertView.Style.Alert - ) { _, position -> - when (position) { - -1 -> { - this.finish() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("获取用户信息失败,是否重试?") + .setNegativeButton("否") + .setPositiveButton("是") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + } - 0 -> { + + override fun onConfirmClick() { obtainUserInfo() } - } - }.show() + }).build().show() } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt index a09ab5e..d6bff66 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt @@ -15,7 +15,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -37,6 +36,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_inspect_route.mapView @@ -179,14 +179,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -326,15 +334,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt index 5cb5c7e..06947ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt @@ -6,10 +6,9 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView -import com.aihook.alertview.library.OnItemClickListener +import androidx.recyclerview.widget.GridLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.ImageGridViewAdapter +import com.casic.birmm.inspect.adapter.NineGridImageAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.* import com.casic.birmm.inspect.model.UserInfoModel @@ -21,6 +20,7 @@ import com.luck.picture.lib.PictureSelector import com.luck.picture.lib.config.PictureConfig import com.luck.picture.lib.config.PictureMimeType +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_new_event.* import kotlinx.android.synthetic.main.include_base_title.* import java.io.File @@ -31,7 +31,7 @@ private lateinit var uploadImageViewModel: UploadImageViewModel private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 - private lateinit var imageAdapter: ImageGridViewAdapter + private lateinit var imageAdapter: NineGridImageAdapter private var isWarning: Boolean = true private lateinit var inspectionId: String private lateinit var inspectionName: String @@ -71,82 +71,47 @@ TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()) //初始化图片九宫格 - imageAdapter = ImageGridViewAdapter(this) - imageGridView.adapter = imageAdapter + imageAdapter = NineGridImageAdapter(this) + nineRecyclerView.layoutManager = GridLayoutManager(this, 3) + nineRecyclerView.adapter = imageAdapter } override fun initEvent() { leftBackView.setOnClickListener { this.finish() } - addImageView.setOnClickListener { - AlertView( - "请选择图片来源", null, "取消", null, arrayOf("拍照", "相册"), - this, AlertView.Style.ActionSheet - ) { _, position -> - when (position) { - 0 -> { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .forResult(PictureConfig.REQUEST_CAMERA) - } - 1 -> { - PictureSelector.create(this) - .openGallery(PictureMimeType.ofImage()) - .isWeChatStyle(true) - .isCamera(false) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) - .forResult(PictureConfig.CHOOSE_REQUEST) - } + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@NewEventActivity) + } else { + OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) } - }.setCancelable(true).show() - } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) uploadImageViewModel.resultModel.observe(this, Observer { model -> if (model.code == 200) { /** * 显示图片 * path: 2021-07\c670eac17d644b179a4324a34bb84329.jpeg * */ - imageGridView.visibility = View.VISIBLE - val sumItemCount: Int = imageAdapter.count + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 3) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { val url = model.data //let函数处理需要针对一个可null的对象统一做判空处理。 url?.let { imagePaths.add(it) realPaths.add(it.combineImagePath()) } - if (realPaths.size == 3) { - addImageView.visibility = View.GONE - } - imageAdapter.setImageList(imageUrls = realPaths) - imageGridView.setOnItemClickListener { _, _, position, _ -> - if (realPaths[position].isEmpty()) { - "图片加载失败,无法查看大图".show(this@NewEventActivity) - } else { - OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) - } - } - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(object : - ImageGridViewAdapter.OnDeleteItemClickListener { - @Override - override fun onDeleteItemClick(position: Int) { - imagePaths.removeAt(position) - realPaths.removeAt(position) - imageAdapter.setImageList(imageUrls = realPaths) - if (realPaths.size != 3) { - addImageView.visibility = View.VISIBLE - } - } - }) + imageAdapter.setupImage(images = realPaths) } else { "最多只能上传3张图片".show(this) } @@ -205,6 +170,35 @@ }) } + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitles(arrayOf("拍照", "相册")) + .setOnActionSheetListener { position -> + when (position) { + 0 -> { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .forResult(PictureConfig.REQUEST_CAMERA) + } + 1 -> { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .isWeChatStyle(true) + .isCamera(false) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .forResult(PictureConfig.CHOOSE_REQUEST) + } + } + }.build().show() + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { diff --git a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt index 2d03157..4bba338 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt @@ -12,7 +12,6 @@ import android.os.Vibrator import android.util.Log import androidx.core.content.ContextCompat -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -33,6 +32,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_map.* @@ -153,14 +153,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -275,15 +283,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt index e00d0dd..258d6f3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt @@ -5,9 +5,9 @@ import android.os.Bundle import android.view.View import androidx.core.content.ContextCompat -import com.aihook.alertview.library.AlertView +import androidx.recyclerview.widget.GridLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.ImageGridViewAdapter +import com.casic.birmm.inspect.adapter.NineGridImageAdapter import com.casic.birmm.inspect.base.BaseSingleModeActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.id @@ -19,16 +19,13 @@ import com.luck.picture.lib.PictureSelector import com.luck.picture.lib.config.PictureConfig import com.luck.picture.lib.config.PictureMimeType +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_new_event.* import kotlinx.android.synthetic.main.include_base_title.* class SingleModeNewEventActivity : BaseSingleModeActivity() { - companion object { - private const val Tag = "SingleModeNewEvent" - } - private val realPaths: ArrayList = ArrayList() //真实图片路径 private var isWarning: Boolean = true private var longitude: Double = 0.0 @@ -37,7 +34,7 @@ private lateinit var inspectionId: String private lateinit var inspectionName: String private lateinit var type: String - private lateinit var imageAdapter: ImageGridViewAdapter + private lateinit var imageAdapter: NineGridImageAdapter private lateinit var taskId: String override fun initLayoutView(): Int = R.layout.activity_new_event @@ -65,41 +62,31 @@ TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()) //初始化图片九宫格 - imageAdapter = ImageGridViewAdapter(this) - imageGridView.adapter = imageAdapter + imageAdapter = NineGridImageAdapter(this) + nineRecyclerView.layoutManager = GridLayoutManager(this, 3) + nineRecyclerView.adapter = imageAdapter } override fun initEvent() { leftBackView.setOnClickListener { this.finish() } - addImageView.setOnClickListener { - AlertView( - "请选择图片来源", null, "取消", null, arrayOf("拍照", "相册"), - this, AlertView.Style.ActionSheet - ) { _, position -> - when (position) { - 0 -> { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .isCompress(true) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .forResult(PictureConfig.REQUEST_CAMERA) - } - 1 -> { - PictureSelector.create(this) - .openGallery(PictureMimeType.ofImage()) - .isWeChatStyle(true) - .isCamera(false) - .isCompress(true) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) - .forResult(PictureConfig.CHOOSE_REQUEST) - } + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@SingleModeNewEventActivity) + } else { + OtherUtils.showBigImage(this@SingleModeNewEventActivity, position, realPaths) } - }.setCancelable(true).show() - } + } + + override fun onItemLongClick(view: View?, position: Int) { + imageAdapter.deleteImage(position) + } + }) addEventButton.setChangeAlphaWhenPress(true) addEventButton.setOnClickListener { @@ -140,6 +127,35 @@ } } + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitles(arrayOf("拍照", "相册")) + .setOnActionSheetListener { position -> + when (position) { + 0 -> { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .forResult(PictureConfig.REQUEST_CAMERA) + } + 1 -> { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .isWeChatStyle(true) + .isCamera(false) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .forResult(PictureConfig.CHOOSE_REQUEST) + } + } + }.build().show() + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { @@ -155,39 +171,16 @@ realPaths.add(cameraResult.compressPath) } } - showSelectedPicture() - } - } - - private fun showSelectedPicture() { - /** - * 显示图片 - * path: /storage/emulated/0/Android/data/com.casic.birmm.inspect/files/Pictures/IMG_CMP_53734632.jpeg - * */ - imageGridView.visibility = View.VISIBLE - val sumItemCount: Int = imageAdapter.count + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 3) { - if (realPaths.size == 3) { - addImageView.visibility = View.GONE + /** + * 显示图片 + * path: /storage/emulated/0/Android/data/com.casic.birmm.inspect/files/Pictures/IMG_CMP_53734632.jpeg + * */ + val sumItemCount: Int = imageAdapter.itemCount + 1 //每多一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能选择3张图片".show(this) } - imageAdapter.setImageList(imageUrls = realPaths) - imageGridView.setOnItemClickListener { _, _, position, _ -> - OtherUtils.showBigImage(this, position, realPaths) - } - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(object : - ImageGridViewAdapter.OnDeleteItemClickListener { - @Override - override fun onDeleteItemClick(position: Int) { - realPaths.removeAt(position) - imageAdapter.setImageList(imageUrls = realPaths) - if (realPaths.size != 3) { - addImageView.visibility = View.VISIBLE - } - } - }) - } else { - "最多只能选择3张图片".show(this) } } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt index 4916c38..a8389da 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt @@ -84,7 +84,7 @@ container.addView(view) //点击大图取消预览 photoView.setOnClickListener { - PageNavigationManager.finishActivity(BigImageActivity::class.java) + PageNavigationManager.currentActivity()?.finish() } return view } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index f9598e8..a5a1c74 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity import com.casic.birmm.inspect.extensions.show @@ -17,6 +16,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.include_base_title.* @@ -73,19 +73,22 @@ ) SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 } else { - AlertView( - "温馨提示", "获取用户信息失败,是否重试?", "是", arrayOf("否"), - null, this, AlertView.Style.Alert - ) { _, position -> - when (position) { - -1 -> { - this.finish() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("获取用户信息失败,是否重试?") + .setNegativeButton("否") + .setPositiveButton("是") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + } - 0 -> { + + override fun onConfirmClick() { obtainUserInfo() } - } - }.show() + }).build().show() } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt index a09ab5e..d6bff66 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt @@ -15,7 +15,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -37,6 +36,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_inspect_route.mapView @@ -179,14 +179,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -326,15 +334,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt index 5cb5c7e..06947ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt @@ -6,10 +6,9 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView -import com.aihook.alertview.library.OnItemClickListener +import androidx.recyclerview.widget.GridLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.ImageGridViewAdapter +import com.casic.birmm.inspect.adapter.NineGridImageAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.* import com.casic.birmm.inspect.model.UserInfoModel @@ -21,6 +20,7 @@ import com.luck.picture.lib.PictureSelector import com.luck.picture.lib.config.PictureConfig import com.luck.picture.lib.config.PictureMimeType +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_new_event.* import kotlinx.android.synthetic.main.include_base_title.* import java.io.File @@ -31,7 +31,7 @@ private lateinit var uploadImageViewModel: UploadImageViewModel private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 - private lateinit var imageAdapter: ImageGridViewAdapter + private lateinit var imageAdapter: NineGridImageAdapter private var isWarning: Boolean = true private lateinit var inspectionId: String private lateinit var inspectionName: String @@ -71,82 +71,47 @@ TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()) //初始化图片九宫格 - imageAdapter = ImageGridViewAdapter(this) - imageGridView.adapter = imageAdapter + imageAdapter = NineGridImageAdapter(this) + nineRecyclerView.layoutManager = GridLayoutManager(this, 3) + nineRecyclerView.adapter = imageAdapter } override fun initEvent() { leftBackView.setOnClickListener { this.finish() } - addImageView.setOnClickListener { - AlertView( - "请选择图片来源", null, "取消", null, arrayOf("拍照", "相册"), - this, AlertView.Style.ActionSheet - ) { _, position -> - when (position) { - 0 -> { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .forResult(PictureConfig.REQUEST_CAMERA) - } - 1 -> { - PictureSelector.create(this) - .openGallery(PictureMimeType.ofImage()) - .isWeChatStyle(true) - .isCamera(false) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) - .forResult(PictureConfig.CHOOSE_REQUEST) - } + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@NewEventActivity) + } else { + OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) } - }.setCancelable(true).show() - } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) uploadImageViewModel.resultModel.observe(this, Observer { model -> if (model.code == 200) { /** * 显示图片 * path: 2021-07\c670eac17d644b179a4324a34bb84329.jpeg * */ - imageGridView.visibility = View.VISIBLE - val sumItemCount: Int = imageAdapter.count + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 3) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { val url = model.data //let函数处理需要针对一个可null的对象统一做判空处理。 url?.let { imagePaths.add(it) realPaths.add(it.combineImagePath()) } - if (realPaths.size == 3) { - addImageView.visibility = View.GONE - } - imageAdapter.setImageList(imageUrls = realPaths) - imageGridView.setOnItemClickListener { _, _, position, _ -> - if (realPaths[position].isEmpty()) { - "图片加载失败,无法查看大图".show(this@NewEventActivity) - } else { - OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) - } - } - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(object : - ImageGridViewAdapter.OnDeleteItemClickListener { - @Override - override fun onDeleteItemClick(position: Int) { - imagePaths.removeAt(position) - realPaths.removeAt(position) - imageAdapter.setImageList(imageUrls = realPaths) - if (realPaths.size != 3) { - addImageView.visibility = View.VISIBLE - } - } - }) + imageAdapter.setupImage(images = realPaths) } else { "最多只能上传3张图片".show(this) } @@ -205,6 +170,35 @@ }) } + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitles(arrayOf("拍照", "相册")) + .setOnActionSheetListener { position -> + when (position) { + 0 -> { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .forResult(PictureConfig.REQUEST_CAMERA) + } + 1 -> { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .isWeChatStyle(true) + .isCamera(false) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .forResult(PictureConfig.CHOOSE_REQUEST) + } + } + }.build().show() + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { diff --git a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt index 2d03157..4bba338 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt @@ -12,7 +12,6 @@ import android.os.Vibrator import android.util.Log import androidx.core.content.ContextCompat -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -33,6 +32,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_map.* @@ -153,14 +153,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -275,15 +283,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt index e00d0dd..258d6f3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt @@ -5,9 +5,9 @@ import android.os.Bundle import android.view.View import androidx.core.content.ContextCompat -import com.aihook.alertview.library.AlertView +import androidx.recyclerview.widget.GridLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.ImageGridViewAdapter +import com.casic.birmm.inspect.adapter.NineGridImageAdapter import com.casic.birmm.inspect.base.BaseSingleModeActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.id @@ -19,16 +19,13 @@ import com.luck.picture.lib.PictureSelector import com.luck.picture.lib.config.PictureConfig import com.luck.picture.lib.config.PictureMimeType +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_new_event.* import kotlinx.android.synthetic.main.include_base_title.* class SingleModeNewEventActivity : BaseSingleModeActivity() { - companion object { - private const val Tag = "SingleModeNewEvent" - } - private val realPaths: ArrayList = ArrayList() //真实图片路径 private var isWarning: Boolean = true private var longitude: Double = 0.0 @@ -37,7 +34,7 @@ private lateinit var inspectionId: String private lateinit var inspectionName: String private lateinit var type: String - private lateinit var imageAdapter: ImageGridViewAdapter + private lateinit var imageAdapter: NineGridImageAdapter private lateinit var taskId: String override fun initLayoutView(): Int = R.layout.activity_new_event @@ -65,41 +62,31 @@ TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()) //初始化图片九宫格 - imageAdapter = ImageGridViewAdapter(this) - imageGridView.adapter = imageAdapter + imageAdapter = NineGridImageAdapter(this) + nineRecyclerView.layoutManager = GridLayoutManager(this, 3) + nineRecyclerView.adapter = imageAdapter } override fun initEvent() { leftBackView.setOnClickListener { this.finish() } - addImageView.setOnClickListener { - AlertView( - "请选择图片来源", null, "取消", null, arrayOf("拍照", "相册"), - this, AlertView.Style.ActionSheet - ) { _, position -> - when (position) { - 0 -> { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .isCompress(true) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .forResult(PictureConfig.REQUEST_CAMERA) - } - 1 -> { - PictureSelector.create(this) - .openGallery(PictureMimeType.ofImage()) - .isWeChatStyle(true) - .isCamera(false) - .isCompress(true) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) - .forResult(PictureConfig.CHOOSE_REQUEST) - } + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@SingleModeNewEventActivity) + } else { + OtherUtils.showBigImage(this@SingleModeNewEventActivity, position, realPaths) } - }.setCancelable(true).show() - } + } + + override fun onItemLongClick(view: View?, position: Int) { + imageAdapter.deleteImage(position) + } + }) addEventButton.setChangeAlphaWhenPress(true) addEventButton.setOnClickListener { @@ -140,6 +127,35 @@ } } + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitles(arrayOf("拍照", "相册")) + .setOnActionSheetListener { position -> + when (position) { + 0 -> { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .forResult(PictureConfig.REQUEST_CAMERA) + } + 1 -> { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .isWeChatStyle(true) + .isCamera(false) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .forResult(PictureConfig.CHOOSE_REQUEST) + } + } + }.build().show() + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { @@ -155,39 +171,16 @@ realPaths.add(cameraResult.compressPath) } } - showSelectedPicture() - } - } - - private fun showSelectedPicture() { - /** - * 显示图片 - * path: /storage/emulated/0/Android/data/com.casic.birmm.inspect/files/Pictures/IMG_CMP_53734632.jpeg - * */ - imageGridView.visibility = View.VISIBLE - val sumItemCount: Int = imageAdapter.count + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 3) { - if (realPaths.size == 3) { - addImageView.visibility = View.GONE + /** + * 显示图片 + * path: /storage/emulated/0/Android/data/com.casic.birmm.inspect/files/Pictures/IMG_CMP_53734632.jpeg + * */ + val sumItemCount: Int = imageAdapter.itemCount + 1 //每多一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能选择3张图片".show(this) } - imageAdapter.setImageList(imageUrls = realPaths) - imageGridView.setOnItemClickListener { _, _, position, _ -> - OtherUtils.showBigImage(this, position, realPaths) - } - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(object : - ImageGridViewAdapter.OnDeleteItemClickListener { - @Override - override fun onDeleteItemClick(position: Int) { - realPaths.removeAt(position) - imageAdapter.setImageList(imageUrls = realPaths) - if (realPaths.size != 3) { - addImageView.visibility = View.VISIBLE - } - } - }) - } else { - "最多只能选择3张图片".show(this) } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/build.gradle b/app/build.gradle index ec2b670..9d49cae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,13 +17,13 @@ defaultConfig { applicationId "com.casic.birmm.inspect" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "2.0.0" ndk { //设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so) - abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64" + abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" } } @@ -74,10 +74,10 @@ implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" //Kotlin协程 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' //返回值转换器 implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.0.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.8.1' //okhttp3日志拦截器 implementation 'com.squareup.okhttp3:logging-interceptor:4.6.0' @@ -98,7 +98,8 @@ implementation 'com.amap.api:3dmap:7.9.1' implementation 'com.amap.api:location:5.3.1' //仿iOS风格的dialog库 - implementation 'com.aihook:alertview:1.0.0' + //基础依赖库 + implementation 'com.github.AndroidCoderPeng:Android-library:1.6.0' //数据库框架 implementation 'org.greenrobot:greendao:3.3.0' } diff --git a/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt new file mode 100644 index 0000000..de7fb5e --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/adapter/NineGridImageAdapter.kt @@ -0,0 +1,93 @@ +package com.casic.birmm.inspect.adapter + +import android.content.Context +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.casic.birmm.inspect.R +import com.qmuiteam.qmui.util.QMUIDisplayHelper + + +/** + * 可删减九宫格 + * */ +class NineGridImageAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private val countLimit = 3 + private var imageData: ArrayList = ArrayList() + + fun setupImage(images: ArrayList) { + this.imageData = images + notifyDataSetChanged() + } + + fun deleteImage(position: Int) { + if (imageData.size != 0) { + imageData.removeAt(position) + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { + val imageView = ImageView(context) + val screenWidth: Int = + QMUIDisplayHelper.getScreenWidth(context) - QMUIDisplayHelper.dp2px(context, 40) + val margins: Int = QMUIDisplayHelper.dp2px(context, 3) + val itemSize = (screenWidth - 6 * margins) / 3 + val params = LinearLayout.LayoutParams(itemSize, itemSize) + params.setMargins(margins, margins, margins, margins) + params.gravity = Gravity.CENTER + imageView.scaleType = ImageView.ScaleType.CENTER_CROP + imageView.layoutParams = params + return ItemViewHolder(imageView) + } + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + if (position == itemCount - 1 && imageData.size < countLimit) { + holder.imageView.setImageResource(R.drawable.ic_add_pic) + holder.imageView.setOnClickListener { //添加图片 + mOnItemClickListener!!.onAddImageClick() + } + } else { + Glide.with(context).load(imageData[position]).into(holder.imageView) + holder.imageView.setOnClickListener { // 点击操作,查看大图 + mOnItemClickListener!!.onItemClick(position) + } + // 长按监听 + holder.imageView.setOnLongClickListener { v -> //长按删除 + mOnItemClickListener!!.onItemLongClick(v, position) + true + } + } + } + + override fun getItemCount(): Int { + // 满3张图就不让其添加新图 + return if (imageData.size != 0 && imageData.size >= countLimit) { + countLimit + } else { + if (imageData.size == 0) 1 else imageData.size + 1 + } + } + + private var mOnItemClickListener: OnItemClickListener? = null + + fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) { + mOnItemClickListener = onItemClickListener + } + + interface OnItemClickListener { + fun onAddImageClick() + fun onItemClick(position: Int) + fun onItemLongClick(view: View?, position: Int) + } + + inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView as ImageView + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt index 4916c38..a8389da 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/BigImageActivity.kt @@ -84,7 +84,7 @@ container.addView(view) //点击大图取消预览 photoView.setOnClickListener { - PageNavigationManager.finishActivity(BigImageActivity::class.java) + PageNavigationManager.currentActivity()?.finish() } return view } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt index f9598e8..a5a1c74 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt @@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.casic.birmm.inspect.R import com.casic.birmm.inspect.base.BaseActivity import com.casic.birmm.inspect.extensions.show @@ -17,6 +16,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.include_base_title.* @@ -73,19 +73,22 @@ ) SaveKeyValues.putValue(Constant.USER_OBJECT, Gson().toJson(it))//保存用户对象 } else { - AlertView( - "温馨提示", "获取用户信息失败,是否重试?", "是", arrayOf("否"), - null, this, AlertView.Style.Alert - ) { _, position -> - when (position) { - -1 -> { - this.finish() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("获取用户信息失败,是否重试?") + .setNegativeButton("否") + .setPositiveButton("是") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + } - 0 -> { + + override fun onConfirmClick() { obtainUserInfo() } - } - }.show() + }).build().show() } }) } diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt index a09ab5e..d6bff66 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt @@ -15,7 +15,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -37,6 +36,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_inspect_route.mapView @@ -179,14 +179,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -326,15 +334,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt index 5cb5c7e..06947ec 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/NewEventActivity.kt @@ -6,10 +6,9 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider -import com.aihook.alertview.library.AlertView -import com.aihook.alertview.library.OnItemClickListener +import androidx.recyclerview.widget.GridLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.ImageGridViewAdapter +import com.casic.birmm.inspect.adapter.NineGridImageAdapter import com.casic.birmm.inspect.base.BaseViewModelActivity import com.casic.birmm.inspect.extensions.* import com.casic.birmm.inspect.model.UserInfoModel @@ -21,6 +20,7 @@ import com.luck.picture.lib.PictureSelector import com.luck.picture.lib.config.PictureConfig import com.luck.picture.lib.config.PictureMimeType +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_new_event.* import kotlinx.android.synthetic.main.include_base_title.* import java.io.File @@ -31,7 +31,7 @@ private lateinit var uploadImageViewModel: UploadImageViewModel private val imagePaths: ArrayList = ArrayList() //服务器返回的拍照数据集 private val realPaths: ArrayList = ArrayList() //真实图片路径 - private lateinit var imageAdapter: ImageGridViewAdapter + private lateinit var imageAdapter: NineGridImageAdapter private var isWarning: Boolean = true private lateinit var inspectionId: String private lateinit var inspectionName: String @@ -71,82 +71,47 @@ TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()) //初始化图片九宫格 - imageAdapter = ImageGridViewAdapter(this) - imageGridView.adapter = imageAdapter + imageAdapter = NineGridImageAdapter(this) + nineRecyclerView.layoutManager = GridLayoutManager(this, 3) + nineRecyclerView.adapter = imageAdapter } override fun initEvent() { leftBackView.setOnClickListener { this.finish() } - addImageView.setOnClickListener { - AlertView( - "请选择图片来源", null, "取消", null, arrayOf("拍照", "相册"), - this, AlertView.Style.ActionSheet - ) { _, position -> - when (position) { - 0 -> { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .forResult(PictureConfig.REQUEST_CAMERA) - } - 1 -> { - PictureSelector.create(this) - .openGallery(PictureMimeType.ofImage()) - .isWeChatStyle(true) - .isCamera(false) - .isCompress(true) - .compressQuality(65) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) - .forResult(PictureConfig.CHOOSE_REQUEST) - } + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@NewEventActivity) + } else { + OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) } - }.setCancelable(true).show() - } + } + + override fun onItemLongClick(view: View?, position: Int) { + imagePaths.removeAt(position) + imageAdapter.deleteImage(position) + } + }) uploadImageViewModel.resultModel.observe(this, Observer { model -> if (model.code == 200) { /** * 显示图片 * path: 2021-07\c670eac17d644b179a4324a34bb84329.jpeg * */ - imageGridView.visibility = View.VISIBLE - val sumItemCount: Int = imageAdapter.count + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 3) { + val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { val url = model.data //let函数处理需要针对一个可null的对象统一做判空处理。 url?.let { imagePaths.add(it) realPaths.add(it.combineImagePath()) } - if (realPaths.size == 3) { - addImageView.visibility = View.GONE - } - imageAdapter.setImageList(imageUrls = realPaths) - imageGridView.setOnItemClickListener { _, _, position, _ -> - if (realPaths[position].isEmpty()) { - "图片加载失败,无法查看大图".show(this@NewEventActivity) - } else { - OtherUtils.showBigImage(this@NewEventActivity, position, realPaths) - } - } - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(object : - ImageGridViewAdapter.OnDeleteItemClickListener { - @Override - override fun onDeleteItemClick(position: Int) { - imagePaths.removeAt(position) - realPaths.removeAt(position) - imageAdapter.setImageList(imageUrls = realPaths) - if (realPaths.size != 3) { - addImageView.visibility = View.VISIBLE - } - } - }) + imageAdapter.setupImage(images = realPaths) } else { "最多只能上传3张图片".show(this) } @@ -205,6 +170,35 @@ }) } + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitles(arrayOf("拍照", "相册")) + .setOnActionSheetListener { position -> + when (position) { + 0 -> { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .forResult(PictureConfig.REQUEST_CAMERA) + } + 1 -> { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .isWeChatStyle(true) + .isCamera(false) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .forResult(PictureConfig.CHOOSE_REQUEST) + } + } + }.build().show() + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { diff --git a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt index 2d03157..4bba338 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeMapActivity.kt @@ -12,7 +12,6 @@ import android.os.Vibrator import android.util.Log import androidx.core.content.ContextCompat -import com.aihook.alertview.library.AlertView import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils @@ -33,6 +32,7 @@ import com.casic.birmm.inspect.widgets.SingleChoiceDialog import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar +import com.pengxh.app.multilib.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.util.QMUIStatusBarHelper import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet import kotlinx.android.synthetic.main.activity_map.* @@ -153,14 +153,22 @@ private fun menuButtonEvent() { //结束巡检 stopInspectButton.setOnClickListener { - AlertView( - "温馨提示", "确定结束巡检吗?", "取消", arrayOf("确定"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - stopInspection() - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("确定结束巡检吗?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + stopInspection() + } + }).build().show() } //蓝牙按钮 @@ -275,15 +283,23 @@ } else { val currentInspection = SaveKeyValues.getValue(Constant.INSPECTION_OBJECT, "") as String if (currentInspection == "") { - AlertView( - "提示", "没有巡检记录,请新建巡检任务", null, arrayOf("去新建"), - null, this, AlertView.Style.Alert - ) { _, position -> - if (position == 0) { - finish() - SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) - } - }.show() + AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("没有巡检记录,请新建巡检任务") + .setNegativeButton("取消") + .setPositiveButton("去新建") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onCancelClick() { + + } + + override fun onConfirmClick() { + finish() + SaveKeyValues.putValue(Constant.INSPECTION_COMPLETED, true) + } + }).build().show() } else { val modelCache = gson.fromJson(currentInspection, NewInspectionModel::class.java) model = NewInspectionModel( diff --git a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt index e00d0dd..258d6f3 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/SingleModeNewEventActivity.kt @@ -5,9 +5,9 @@ import android.os.Bundle import android.view.View import androidx.core.content.ContextCompat -import com.aihook.alertview.library.AlertView +import androidx.recyclerview.widget.GridLayoutManager import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.adapter.ImageGridViewAdapter +import com.casic.birmm.inspect.adapter.NineGridImageAdapter import com.casic.birmm.inspect.base.BaseSingleModeActivity import com.casic.birmm.inspect.extensions.filterString import com.casic.birmm.inspect.extensions.id @@ -19,16 +19,13 @@ import com.luck.picture.lib.PictureSelector import com.luck.picture.lib.config.PictureConfig import com.luck.picture.lib.config.PictureMimeType +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import kotlinx.android.synthetic.main.activity_new_event.* import kotlinx.android.synthetic.main.include_base_title.* class SingleModeNewEventActivity : BaseSingleModeActivity() { - companion object { - private const val Tag = "SingleModeNewEvent" - } - private val realPaths: ArrayList = ArrayList() //真实图片路径 private var isWarning: Boolean = true private var longitude: Double = 0.0 @@ -37,7 +34,7 @@ private lateinit var inspectionId: String private lateinit var inspectionName: String private lateinit var type: String - private lateinit var imageAdapter: ImageGridViewAdapter + private lateinit var imageAdapter: NineGridImageAdapter private lateinit var taskId: String override fun initLayoutView(): Int = R.layout.activity_new_event @@ -65,41 +62,31 @@ TimeOrDateUtil.timestampToCompleteDate(System.currentTimeMillis()) //初始化图片九宫格 - imageAdapter = ImageGridViewAdapter(this) - imageGridView.adapter = imageAdapter + imageAdapter = NineGridImageAdapter(this) + nineRecyclerView.layoutManager = GridLayoutManager(this, 3) + nineRecyclerView.adapter = imageAdapter } override fun initEvent() { leftBackView.setOnClickListener { this.finish() } - addImageView.setOnClickListener { - AlertView( - "请选择图片来源", null, "取消", null, arrayOf("拍照", "相册"), - this, AlertView.Style.ActionSheet - ) { _, position -> - when (position) { - 0 -> { - PictureSelector.create(this) - .openCamera(PictureMimeType.ofImage()) - .isCompress(true) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .forResult(PictureConfig.REQUEST_CAMERA) - } - 1 -> { - PictureSelector.create(this) - .openGallery(PictureMimeType.ofImage()) - .isWeChatStyle(true) - .isCamera(false) - .isCompress(true) - .compressSavePath(FileUtils.imageCompressPath) - .imageEngine(GlideLoadEngine.createGlideEngine()) - .maxSelectNum(3) - .forResult(PictureConfig.CHOOSE_REQUEST) - } + imageAdapter.setOnItemClickListener(object : NineGridImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + selectPicture() + } + + override fun onItemClick(position: Int) { + if (realPaths[position].isEmpty()) { + "图片加载失败,无法查看大图".show(this@SingleModeNewEventActivity) + } else { + OtherUtils.showBigImage(this@SingleModeNewEventActivity, position, realPaths) } - }.setCancelable(true).show() - } + } + + override fun onItemLongClick(view: View?, position: Int) { + imageAdapter.deleteImage(position) + } + }) addEventButton.setChangeAlphaWhenPress(true) addEventButton.setOnClickListener { @@ -140,6 +127,35 @@ } } + private fun selectPicture() { + BottomActionSheet.Builder() + .setContext(this) + .setActionItemTitles(arrayOf("拍照", "相册")) + .setOnActionSheetListener { position -> + when (position) { + 0 -> { + PictureSelector.create(this) + .openCamera(PictureMimeType.ofImage()) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .forResult(PictureConfig.REQUEST_CAMERA) + } + 1 -> { + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) + .isWeChatStyle(true) + .isCamera(false) + .isCompress(true) + .compressSavePath(FileUtils.imageCompressPath) + .imageEngine(GlideLoadEngine.createGlideEngine()) + .maxSelectNum(3) + .forResult(PictureConfig.CHOOSE_REQUEST) + } + } + }.build().show() + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { @@ -155,39 +171,16 @@ realPaths.add(cameraResult.compressPath) } } - showSelectedPicture() - } - } - - private fun showSelectedPicture() { - /** - * 显示图片 - * path: /storage/emulated/0/Android/data/com.casic.birmm.inspect/files/Pictures/IMG_CMP_53734632.jpeg - * */ - imageGridView.visibility = View.VISIBLE - val sumItemCount: Int = imageAdapter.count + 1 //每上传一张图片,图片总数都是在原有的基础上+1 - if (sumItemCount <= 3) { - if (realPaths.size == 3) { - addImageView.visibility = View.GONE + /** + * 显示图片 + * path: /storage/emulated/0/Android/data/com.casic.birmm.inspect/files/Pictures/IMG_CMP_53734632.jpeg + * */ + val sumItemCount: Int = imageAdapter.itemCount + 1 //每多一张图片,图片总数都是在原有的基础上+1 + if (sumItemCount <= 4) { + imageAdapter.setupImage(images = realPaths) + } else { + "最多只能选择3张图片".show(this) } - imageAdapter.setImageList(imageUrls = realPaths) - imageGridView.setOnItemClickListener { _, _, position, _ -> - OtherUtils.showBigImage(this, position, realPaths) - } - //删除按钮点击事件 - imageAdapter.setOnDeleteClickListener(object : - ImageGridViewAdapter.OnDeleteItemClickListener { - @Override - override fun onDeleteItemClick(position: Int) { - realPaths.removeAt(position) - imageAdapter.setImageList(imageUrls = realPaths) - if (realPaths.size != 3) { - addImageView.visibility = View.VISIBLE - } - } - }) - } else { - "最多只能选择3张图片".show(this) } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_pic.xml b/app/src/main/res/drawable/ic_add_pic.xml new file mode 100644 index 0000000..9d1e830 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_pic.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/activity_new_event.xml b/app/src/main/res/layout/activity_new_event.xml index d69e1ee..5ca39c2 100644 --- a/app/src/main/res/layout/activity_new_event.xml +++ b/app/src/main/res/layout/activity_new_event.xml @@ -128,35 +128,19 @@ android:layout_margin="@dimen/margin_10dp" android:orientation="vertical"> - + + - - - - - - - + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:scrollbars="none" />