diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt index fef1142..da557cf 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt @@ -131,6 +131,10 @@ DetermineDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt index fef1142..da557cf 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt @@ -131,6 +131,10 @@ DetermineDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt index 138f9cf..fc3ccd7 100644 --- a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt +++ b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderDetailModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.pengxh.app.multilib.utils.SizeUtil class TimeLineBottomSheet private constructor(builder: Builder) : Dialog( @@ -48,6 +49,7 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) + orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) @@ -91,14 +93,6 @@ holder.fromPersonView.text = rowsBean.from holder.toPersonView.text = rowsBean.to holder.transferDateView.text = rowsBean.time - when (position) { - 0 -> { - - } - items.size - 1 -> { - - } - } } inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt index fef1142..da557cf 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt @@ -131,6 +131,10 @@ DetermineDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt index 138f9cf..fc3ccd7 100644 --- a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt +++ b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderDetailModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.pengxh.app.multilib.utils.SizeUtil class TimeLineBottomSheet private constructor(builder: Builder) : Dialog( @@ -48,6 +49,7 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) + orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) @@ -91,14 +93,6 @@ holder.fromPersonView.text = rowsBean.from holder.toPersonView.text = rowsBean.to holder.transferDateView.text = rowsBean.time - when (position) { - 0 -> { - - } - items.size - 1 -> { - - } - } } inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml index 6894a13..ef661b6 100644 --- a/app/src/main/res/drawable/ic_delete.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -1,6 +1,6 @@ + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt index fef1142..da557cf 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt @@ -131,6 +131,10 @@ DetermineDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt index 138f9cf..fc3ccd7 100644 --- a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt +++ b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderDetailModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.pengxh.app.multilib.utils.SizeUtil class TimeLineBottomSheet private constructor(builder: Builder) : Dialog( @@ -48,6 +49,7 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) + orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) @@ -91,14 +93,6 @@ holder.fromPersonView.text = rowsBean.from holder.toPersonView.text = rowsBean.to holder.transferDateView.text = rowsBean.time - when (position) { - 0 -> { - - } - items.size - 1 -> { - - } - } } inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml index 6894a13..ef661b6 100644 --- a/app/src/main/res/drawable/ic_delete.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -1,6 +1,6 @@ + android:layout_height="@dimen/titleViewHeight" + android:layout_marginStart="@dimen/dp_20" + android:gravity="center_vertical"> + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt index fef1142..da557cf 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt @@ -131,6 +131,10 @@ DetermineDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt index 138f9cf..fc3ccd7 100644 --- a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt +++ b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderDetailModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.pengxh.app.multilib.utils.SizeUtil class TimeLineBottomSheet private constructor(builder: Builder) : Dialog( @@ -48,6 +49,7 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) + orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) @@ -91,14 +93,6 @@ holder.fromPersonView.text = rowsBean.from holder.toPersonView.text = rowsBean.to holder.transferDateView.text = rowsBean.time - when (position) { - 0 -> { - - } - items.size - 1 -> { - - } - } } inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml index 6894a13..ef661b6 100644 --- a/app/src/main/res/drawable/ic_delete.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -1,6 +1,6 @@ + android:layout_height="@dimen/titleViewHeight" + android:layout_marginStart="@dimen/dp_20" + android:gravity="center_vertical"> - - - + - + android:paddingHorizontal="@dimen/dp_5" + android:paddingVertical="@dimen/dp_3" + android:text="流转记录" + android:textColor="@color/hintTextColor" + android:textSize="12sp" + app:qmui_backgroundColor="@color/white" + app:qmui_borderColor="@color/hintTextColor" + app:qmui_radius="@dimen/dp_20" /> + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt index fef1142..da557cf 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt @@ -131,6 +131,10 @@ DetermineDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt index 138f9cf..fc3ccd7 100644 --- a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt +++ b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderDetailModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.pengxh.app.multilib.utils.SizeUtil class TimeLineBottomSheet private constructor(builder: Builder) : Dialog( @@ -48,6 +49,7 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) + orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) @@ -91,14 +93,6 @@ holder.fromPersonView.text = rowsBean.from holder.toPersonView.text = rowsBean.to holder.transferDateView.text = rowsBean.time - when (position) { - 0 -> { - - } - items.size - 1 -> { - - } - } } inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml index 6894a13..ef661b6 100644 --- a/app/src/main/res/drawable/ic_delete.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -1,6 +1,6 @@ + android:layout_height="@dimen/titleViewHeight" + android:layout_marginStart="@dimen/dp_20" + android:gravity="center_vertical"> - - - + - + android:paddingHorizontal="@dimen/dp_5" + android:paddingVertical="@dimen/dp_3" + android:text="流转记录" + android:textColor="@color/hintTextColor" + android:textSize="12sp" + app:qmui_backgroundColor="@color/white" + app:qmui_borderColor="@color/hintTextColor" + app:qmui_radius="@dimen/dp_20" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_flow_recycleview.xml b/app/src/main/res/layout/item_order_flow_recycleview.xml index b65a22e..56fe277 100644 --- a/app/src/main/res/layout/item_order_flow_recycleview.xml +++ b/app/src/main/res/layout/item_order_flow_recycleview.xml @@ -1,9 +1,9 @@ + android:layout_height="@dimen/titleViewHeight" + android:gravity="center_vertical" + android:orientation="horizontal"> + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt index fef1142..da557cf 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt @@ -131,6 +131,10 @@ DetermineDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt index 138f9cf..fc3ccd7 100644 --- a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt +++ b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderDetailModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.pengxh.app.multilib.utils.SizeUtil class TimeLineBottomSheet private constructor(builder: Builder) : Dialog( @@ -48,6 +49,7 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) + orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) @@ -91,14 +93,6 @@ holder.fromPersonView.text = rowsBean.from holder.toPersonView.text = rowsBean.to holder.transferDateView.text = rowsBean.time - when (position) { - 0 -> { - - } - items.size - 1 -> { - - } - } } inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml index 6894a13..ef661b6 100644 --- a/app/src/main/res/drawable/ic_delete.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -1,6 +1,6 @@ + android:layout_height="@dimen/titleViewHeight" + android:layout_marginStart="@dimen/dp_20" + android:gravity="center_vertical"> - - - + - + android:paddingHorizontal="@dimen/dp_5" + android:paddingVertical="@dimen/dp_3" + android:text="流转记录" + android:textColor="@color/hintTextColor" + android:textSize="12sp" + app:qmui_backgroundColor="@color/white" + app:qmui_borderColor="@color/hintTextColor" + app:qmui_radius="@dimen/dp_20" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_flow_recycleview.xml b/app/src/main/res/layout/item_order_flow_recycleview.xml index b65a22e..56fe277 100644 --- a/app/src/main/res/layout/item_order_flow_recycleview.xml +++ b/app/src/main/res/layout/item_order_flow_recycleview.xml @@ -1,9 +1,9 @@ + android:layout_height="@dimen/titleViewHeight" + android:gravity="center_vertical" + android:orientation="horizontal"> - - - + - + android:paddingHorizontal="@dimen/dp_5" + android:paddingVertical="@dimen/dp_3" + android:text="流转记录" + android:textColor="@color/hintTextColor" + android:textSize="12sp" + app:qmui_backgroundColor="@color/white" + app:qmui_borderColor="@color/hintTextColor" + app:qmui_radius="@dimen/dp_20" /> + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt index 3e9578a..166e9af 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/CompletedOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt index 5e62ece..81cafe4 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/InHandleOrderAdapter.kt @@ -5,27 +5,17 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R -import com.casic.app.smartwell.model.UserDetailModel import com.casic.app.smartwell.model.WorkOrderListModel -import com.casic.app.smartwell.utils.Constant -import com.casic.app.smartwell.utils.SaveKeyValues -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { - private lateinit var userDataModel: UserDetailModel.DataBean private var layoutInflater: LayoutInflater = LayoutInflater.from(context) - private val gson = Gson() override fun onCreateViewHolder( parent: ViewGroup, @@ -55,31 +45,16 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - - val userDetailJson = SaveKeyValues.getValue(Constant.USER_DETAIL_MODEL, "") as String - if (userDetailJson != "") { - userDataModel = gson.fromJson( - userDetailJson, - object : TypeToken() {}.type - ) - holder.currentStateView.text = "${userDataModel.name}正在现场确认中..." - } + holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -91,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt index f68cef4..185ee0a 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/UndeterminedOrderAdapter.kt @@ -5,17 +5,14 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.animation.LinearInterpolator -import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderListModel +import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class UndeterminedOrderAdapter( - private val context: Context, - private val dataRows: MutableList + context: Context, private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) @@ -48,7 +45,6 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." //绑定事件 @@ -56,16 +52,9 @@ holder.itemView.setOnClickListener { listener!!.onClicked(position) } - holder.expandLayout.setOnClickListener { - val rotateAnimation = holder.arrowImageView.animate() - rotateAnimation.duration = 300 - rotateAnimation.interpolator = LinearInterpolator() - if (holder.arrowImageView.rotation == 0f) { - rotateAnimation.rotation(180f) - } else { - rotateAnimation.rotation(0f) - } - //展开View + holder.transferView.setChangeAlphaWhenPress(true) + holder.transferView.setOnClickListener { + listener!!.onTransferViewClicked(position) } } } @@ -77,15 +66,15 @@ var alarmValueView: TextView = view.findViewById(R.id.alarmValueView) var wellLocationView: TextView = view.findViewById(R.id.wellLocationView) var currentStateView: TextView = view.findViewById(R.id.currentStateView) - - var expandLayout: LinearLayout = view.findViewById(R.id.expandLayout) - var arrowImageView: ImageView = view.findViewById(R.id.arrowImageView) + var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } private var listener: OnItemClickListener? = null interface OnItemClickListener { fun onClicked(position: Int) + + fun onTransferViewClicked(position: Int) } fun setOnItemClickListener(onClickListener: OnItemClickListener?) { diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +} diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt index d39195f..ba0b2e9 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/CompletedOrderFragment.kt @@ -131,6 +131,10 @@ CompletedDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt index d56f133..66e27d6 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/InHandleOrderFragment.kt @@ -131,6 +131,10 @@ InHandleDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt index fef1142..da557cf 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/UndeterminedOrderFragment.kt @@ -131,6 +131,10 @@ DetermineDetailActivity::class.java, jobId ) } + + override fun onTransferViewClicked(position: Int) { + + } }) } } diff --git a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt index 138f9cf..fc3ccd7 100644 --- a/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt +++ b/app/src/main/java/com/casic/app/smartwell/widgets/TimeLineBottomSheet.kt @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R import com.casic.app.smartwell.model.WorkOrderDetailModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.pengxh.app.multilib.utils.SizeUtil class TimeLineBottomSheet private constructor(builder: Builder) : Dialog( @@ -48,6 +49,7 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) + orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) @@ -91,14 +93,6 @@ holder.fromPersonView.text = rowsBean.from holder.toPersonView.text = rowsBean.to holder.transferDateView.text = rowsBean.time - when (position) { - 0 -> { - - } - items.size - 1 -> { - - } - } } inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml index 6894a13..ef661b6 100644 --- a/app/src/main/res/drawable/ic_delete.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -1,6 +1,6 @@ + android:layout_height="@dimen/titleViewHeight" + android:layout_marginStart="@dimen/dp_20" + android:gravity="center_vertical"> - - - + - + android:paddingHorizontal="@dimen/dp_5" + android:paddingVertical="@dimen/dp_3" + android:text="流转记录" + android:textColor="@color/hintTextColor" + android:textSize="12sp" + app:qmui_backgroundColor="@color/white" + app:qmui_borderColor="@color/hintTextColor" + app:qmui_radius="@dimen/dp_20" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_flow_recycleview.xml b/app/src/main/res/layout/item_order_flow_recycleview.xml index b65a22e..56fe277 100644 --- a/app/src/main/res/layout/item_order_flow_recycleview.xml +++ b/app/src/main/res/layout/item_order_flow_recycleview.xml @@ -1,9 +1,9 @@ + android:layout_height="@dimen/titleViewHeight" + android:gravity="center_vertical" + android:orientation="horizontal"> - - - + - + android:paddingHorizontal="@dimen/dp_5" + android:paddingVertical="@dimen/dp_3" + android:text="流转记录" + android:textColor="@color/hintTextColor" + android:textSize="12sp" + app:qmui_backgroundColor="@color/white" + app:qmui_borderColor="@color/hintTextColor" + app:qmui_radius="@dimen/dp_20" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_undetermined_recycleview.xml b/app/src/main/res/layout/item_order_undetermined_recycleview.xml index f86122e..35cd7e6 100644 --- a/app/src/main/res/layout/item_order_undetermined_recycleview.xml +++ b/app/src/main/res/layout/item_order_undetermined_recycleview.xml @@ -82,27 +82,32 @@ android:textColor="@color/mainThemeColor" app:drawableStartCompat="@mipmap/clock" /> - - - + - + android:paddingHorizontal="@dimen/dp_5" + android:paddingVertical="@dimen/dp_3" + android:text="流转记录" + android:textColor="@color/hintTextColor" + android:textSize="12sp" + app:qmui_backgroundColor="@color/white" + app:qmui_borderColor="@color/hintTextColor" + app:qmui_radius="@dimen/dp_20" /> + + \ No newline at end of file