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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt index 8d6fc84..eae05a6 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -12,15 +12,13 @@ class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() { private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) - private val linePaint: Paint + private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) private val radius: Int init { - circlePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint = Paint(Paint.ANTI_ALIAS_FLAG) - linePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() - radius = SizeUtil.dp2px(context, 8f) + linePaint.color = R.color.hintTextColor.convertColor(context) + linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + radius = SizeUtil.dp2px(context, 7.5f) } override fun getItemOffsets( @@ -28,7 +26,7 @@ parent: RecyclerView, state: RecyclerView.State ) { super.getItemOffsets(outRect, view, parent, state) - outRect.left = SizeUtil.dp2px(context, 20f) + outRect.left = SizeUtil.dp2px(context, 16.5f) } override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { @@ -56,11 +54,19 @@ val childPosition = parent.getChildLayoutPosition(childView) // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.style = Paint.Style.FILL - } else { - circlePaint.style = Paint.Style.STROKE - circlePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() + when (childPosition) { + 0 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.hintTextColor.convertColor(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + } } canvas.drawCircle( startX, 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt index 8d6fc84..eae05a6 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -12,15 +12,13 @@ class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() { private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) - private val linePaint: Paint + private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) private val radius: Int init { - circlePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint = Paint(Paint.ANTI_ALIAS_FLAG) - linePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() - radius = SizeUtil.dp2px(context, 8f) + linePaint.color = R.color.hintTextColor.convertColor(context) + linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + radius = SizeUtil.dp2px(context, 7.5f) } override fun getItemOffsets( @@ -28,7 +26,7 @@ parent: RecyclerView, state: RecyclerView.State ) { super.getItemOffsets(outRect, view, parent, state) - outRect.left = SizeUtil.dp2px(context, 20f) + outRect.left = SizeUtil.dp2px(context, 16.5f) } override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { @@ -56,11 +54,19 @@ val childPosition = parent.getChildLayoutPosition(childView) // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.style = Paint.Style.FILL - } else { - circlePaint.style = Paint.Style.STROKE - circlePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() + when (childPosition) { + 0 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.hintTextColor.convertColor(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + } } canvas.drawCircle( startX, 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 fc3ccd7..1453d9c 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,7 +12,6 @@ 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( @@ -49,7 +48,6 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) - orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt index 8d6fc84..eae05a6 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -12,15 +12,13 @@ class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() { private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) - private val linePaint: Paint + private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) private val radius: Int init { - circlePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint = Paint(Paint.ANTI_ALIAS_FLAG) - linePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() - radius = SizeUtil.dp2px(context, 8f) + linePaint.color = R.color.hintTextColor.convertColor(context) + linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + radius = SizeUtil.dp2px(context, 7.5f) } override fun getItemOffsets( @@ -28,7 +26,7 @@ parent: RecyclerView, state: RecyclerView.State ) { super.getItemOffsets(outRect, view, parent, state) - outRect.left = SizeUtil.dp2px(context, 20f) + outRect.left = SizeUtil.dp2px(context, 16.5f) } override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { @@ -56,11 +54,19 @@ val childPosition = parent.getChildLayoutPosition(childView) // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.style = Paint.Style.FILL - } else { - circlePaint.style = Paint.Style.STROKE - circlePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() + when (childPosition) { + 0 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.hintTextColor.convertColor(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + } } canvas.drawCircle( startX, 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 fc3ccd7..1453d9c 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,7 +12,6 @@ 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( @@ -49,7 +48,6 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) - orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index 8fdd4bb..50f696f 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,9 +1,9 @@ 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt index 8d6fc84..eae05a6 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -12,15 +12,13 @@ class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() { private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) - private val linePaint: Paint + private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) private val radius: Int init { - circlePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint = Paint(Paint.ANTI_ALIAS_FLAG) - linePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() - radius = SizeUtil.dp2px(context, 8f) + linePaint.color = R.color.hintTextColor.convertColor(context) + linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + radius = SizeUtil.dp2px(context, 7.5f) } override fun getItemOffsets( @@ -28,7 +26,7 @@ parent: RecyclerView, state: RecyclerView.State ) { super.getItemOffsets(outRect, view, parent, state) - outRect.left = SizeUtil.dp2px(context, 20f) + outRect.left = SizeUtil.dp2px(context, 16.5f) } override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { @@ -56,11 +54,19 @@ val childPosition = parent.getChildLayoutPosition(childView) // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.style = Paint.Style.FILL - } else { - circlePaint.style = Paint.Style.STROKE - circlePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() + when (childPosition) { + 0 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.hintTextColor.convertColor(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + } } canvas.drawCircle( startX, 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 fc3ccd7..1453d9c 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,7 +12,6 @@ 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( @@ -49,7 +48,6 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) - orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index 8fdd4bb..50f696f 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/layout/dialog_bottom_sheet.xml b/app/src/main/res/layout/dialog_bottom_sheet.xml index e95b28c..e885505 100644 --- a/app/src/main/res/layout/dialog_bottom_sheet.xml +++ b/app/src/main/res/layout/dialog_bottom_sheet.xml @@ -31,7 +31,6 @@ + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt index 8d6fc84..eae05a6 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -12,15 +12,13 @@ class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() { private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) - private val linePaint: Paint + private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) private val radius: Int init { - circlePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint = Paint(Paint.ANTI_ALIAS_FLAG) - linePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() - radius = SizeUtil.dp2px(context, 8f) + linePaint.color = R.color.hintTextColor.convertColor(context) + linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + radius = SizeUtil.dp2px(context, 7.5f) } override fun getItemOffsets( @@ -28,7 +26,7 @@ parent: RecyclerView, state: RecyclerView.State ) { super.getItemOffsets(outRect, view, parent, state) - outRect.left = SizeUtil.dp2px(context, 20f) + outRect.left = SizeUtil.dp2px(context, 16.5f) } override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { @@ -56,11 +54,19 @@ val childPosition = parent.getChildLayoutPosition(childView) // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.style = Paint.Style.FILL - } else { - circlePaint.style = Paint.Style.STROKE - circlePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() + when (childPosition) { + 0 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.hintTextColor.convertColor(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + } } canvas.drawCircle( startX, 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 fc3ccd7..1453d9c 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,7 +12,6 @@ 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( @@ -49,7 +48,6 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) - orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index 8fdd4bb..50f696f 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/layout/dialog_bottom_sheet.xml b/app/src/main/res/layout/dialog_bottom_sheet.xml index e95b28c..e885505 100644 --- a/app/src/main/res/layout/dialog_bottom_sheet.xml +++ b/app/src/main/res/layout/dialog_bottom_sheet.xml @@ -31,7 +31,6 @@ + + + + + + \ 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 166e9af..5261131 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class CompletedOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt index 8d6fc84..eae05a6 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -12,15 +12,13 @@ class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() { private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) - private val linePaint: Paint + private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) private val radius: Int init { - circlePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint = Paint(Paint.ANTI_ALIAS_FLAG) - linePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() - radius = SizeUtil.dp2px(context, 8f) + linePaint.color = R.color.hintTextColor.convertColor(context) + linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + radius = SizeUtil.dp2px(context, 7.5f) } override fun getItemOffsets( @@ -28,7 +26,7 @@ parent: RecyclerView, state: RecyclerView.State ) { super.getItemOffsets(outRect, view, parent, state) - outRect.left = SizeUtil.dp2px(context, 20f) + outRect.left = SizeUtil.dp2px(context, 16.5f) } override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { @@ -56,11 +54,19 @@ val childPosition = parent.getChildLayoutPosition(childView) // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.style = Paint.Style.FILL - } else { - circlePaint.style = Paint.Style.STROKE - circlePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() + when (childPosition) { + 0 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.hintTextColor.convertColor(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + } } canvas.drawCircle( startX, 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 fc3ccd7..1453d9c 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,7 +12,6 @@ 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( @@ -49,7 +48,6 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) - orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index 8fdd4bb..50f696f 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/layout/dialog_bottom_sheet.xml b/app/src/main/res/layout/dialog_bottom_sheet.xml index e95b28c..e885505 100644 --- a/app/src/main/res/layout/dialog_bottom_sheet.xml +++ b/app/src/main/res/layout/dialog_bottom_sheet.xml @@ -31,7 +31,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_completed_recycleview.xml b/app/src/main/res/layout/item_order_completed_recycleview.xml index 35cd7e6..fea62e6 100644 --- a/app/src/main/res/layout/item_order_completed_recycleview.xml +++ b/app/src/main/res/layout/item_order_completed_recycleview.xml @@ -71,20 +71,48 @@ android:textSize="@dimen/textFontSize" /> - + android:paddingVertical="@dimen/dp_5"> + + + + + + + + + + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt index 8d6fc84..eae05a6 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -12,15 +12,13 @@ class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() { private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) - private val linePaint: Paint + private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) private val radius: Int init { - circlePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint = Paint(Paint.ANTI_ALIAS_FLAG) - linePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() - radius = SizeUtil.dp2px(context, 8f) + linePaint.color = R.color.hintTextColor.convertColor(context) + linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + radius = SizeUtil.dp2px(context, 7.5f) } override fun getItemOffsets( @@ -28,7 +26,7 @@ parent: RecyclerView, state: RecyclerView.State ) { super.getItemOffsets(outRect, view, parent, state) - outRect.left = SizeUtil.dp2px(context, 20f) + outRect.left = SizeUtil.dp2px(context, 16.5f) } override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { @@ -56,11 +54,19 @@ val childPosition = parent.getChildLayoutPosition(childView) // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.style = Paint.Style.FILL - } else { - circlePaint.style = Paint.Style.STROKE - circlePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() + when (childPosition) { + 0 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.hintTextColor.convertColor(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + } } canvas.drawCircle( startX, 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 fc3ccd7..1453d9c 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,7 +12,6 @@ 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( @@ -49,7 +48,6 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) - orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index 8fdd4bb..50f696f 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/layout/dialog_bottom_sheet.xml b/app/src/main/res/layout/dialog_bottom_sheet.xml index e95b28c..e885505 100644 --- a/app/src/main/res/layout/dialog_bottom_sheet.xml +++ b/app/src/main/res/layout/dialog_bottom_sheet.xml @@ -31,7 +31,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_completed_recycleview.xml b/app/src/main/res/layout/item_order_completed_recycleview.xml index 35cd7e6..fea62e6 100644 --- a/app/src/main/res/layout/item_order_completed_recycleview.xml +++ b/app/src/main/res/layout/item_order_completed_recycleview.xml @@ -71,20 +71,48 @@ android:textSize="@dimen/textFontSize" /> - + android:paddingVertical="@dimen/dp_5"> + + + + + + + + + - + android:paddingVertical="@dimen/dp_5"> + + + + + + + + + + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: CompletedOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}已完成工单" + holder.currentStateView.text = String.format("${rowsBean.handleJobPerson}完成工单") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,30 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.handleJobTime, + String.format("${rowsBean.handleJobPerson}完成工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +116,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt new file mode 100644 index 0000000..ccf93ac --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/adapter/ExpandableViewAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.app.smartwell.adapter + +import android.annotation.SuppressLint +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.convertColor +import com.casic.app.smartwell.model.ExpandableDataModel + +@SuppressLint("NotifyDataSetChanged") +class ExpandableViewAdapter(private val context: Context) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var dataRows: MutableList = ArrayList() + + fun setExpandableData(dataSet: MutableList) { + this.dataRows = dataSet + notifyDataSetChanged() + } + + fun clearAll() { + if (dataRows.size != 0) { + dataRows.clear() + notifyDataSetChanged() + } + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): ExpandableItemViewHolder { + val view: View = + layoutInflater.inflate(R.layout.item_expand_recycleview, parent, false) + return ExpandableItemViewHolder(view) + } + + override fun onBindViewHolder(holder: ExpandableItemViewHolder, position: Int) { + holder.dateView.text = dataRows[position].orderStateTime + holder.operationView.text = dataRows[position].operationPerson + if (position == dataRows.size - 1) { + holder.dateView.setTextColor(R.color.mainThemeColor.convertColor(context)) + holder.operationView.setTextColor(R.color.mainThemeColor.convertColor(context)) + } + } + + override fun getItemCount(): Int = dataRows.size + + inner class ExpandableItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { + var dateView: TextView = view.findViewById(R.id.dateView) + var operationView: TextView = view.findViewById(R.id.operationView) + } +} \ No newline at end of file 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 4c44f59..d9b2712 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 @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class InHandleOrderAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: InHandleOrderAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在处理中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在处理...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,24 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + expandableList.add( + ExpandableDataModel( + rowsBean.confirmJobTime, + String.format("${rowsBean.confirmJobPerson}确认工单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +110,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt index 749d7d6..644504f 100644 --- a/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt +++ b/app/src/main/java/com/casic/app/smartwell/adapter/NotConfirmedAdapter.kt @@ -1,21 +1,27 @@ package com.casic.app.smartwell.adapter -import android.annotation.SuppressLint import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.app.smartwell.R +import com.casic.app.smartwell.extensions.arrowAnimation +import com.casic.app.smartwell.model.ExpandableDataModel import com.casic.app.smartwell.model.WorkOrderListModel +import com.casic.app.smartwell.utils.TimeLineItemDecoration import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton class NotConfirmedAdapter( - context: Context, private val dataRows: MutableList + private val context: Context, + private val dataRows: MutableList ) : RecyclerView.Adapter() { private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var isExpand = false override fun onCreateViewHolder( parent: ViewGroup, @@ -28,7 +34,6 @@ override fun getItemCount(): Int = dataRows.size - @SuppressLint("SetTextI18n") override fun onBindViewHolder( holder: NotConfirmedAdapter.ItemViewHolder, position: Int @@ -45,13 +50,34 @@ holder.alarmValueView.text = alarmValue } holder.wellLocationView.text = rowsBean.position - holder.currentStateView.text = "${rowsBean.jobBelongTo}正在现场确认中..." + holder.currentStateView.text = String.format("${rowsBean.jobBelongTo}正在现场确认中...") //绑定事件 if (listener != null) { holder.itemView.setOnClickListener { listener!!.onClicked(position) } + + val expandableViewAdapter = ExpandableViewAdapter(context) + holder.expandableView.adapter = expandableViewAdapter + holder.expandableView.layoutManager = LinearLayoutManager(context) + holder.expandableView.addItemDecoration(TimeLineItemDecoration(context)) + holder.expandableImageView.setOnClickListener { + if (!isExpand) { + //展开列表动画 + holder.expandableImageView.arrowAnimation(180f) + isExpand = true + //子列表绑定数据 + expandableViewAdapter.setExpandableData(createExpandableList(rowsBean)) + } else { + //关闭列表动画 + holder.expandableImageView.arrowAnimation(0f) + isExpand = false + //子列表清空数据 + expandableViewAdapter.clearAll() + } + } + holder.transferView.setChangeAlphaWhenPress(true) holder.transferView.setOnClickListener { listener!!.onTransferViewClicked(position) @@ -59,6 +85,18 @@ } } + private fun createExpandableList(rowsBean: WorkOrderListModel.DataBean.RowsBean): MutableList { + val expandableList: MutableList = ArrayList() + expandableList.add(ExpandableDataModel(rowsBean.createTime, "发起工单")) + expandableList.add( + ExpandableDataModel( + rowsBean.getJobTime, + String.format("${rowsBean.getJobPerson}接单") + ) + ) + return expandableList + } + inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) { var alarmContentView: TextView = view.findViewById(R.id.alarmContentView) var createTimeView: TextView = view.findViewById(R.id.createTimeView) @@ -66,6 +104,8 @@ 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 expandableImageView: ImageView = view.findViewById(R.id.expandableImageView) + var expandableView: RecyclerView = view.findViewById(R.id.expandableView) var transferView: QMUIRoundButton = view.findViewById(R.id.transferView) } diff --git a/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt new file mode 100644 index 0000000..d3a900e --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/extensions/ImageView.kt @@ -0,0 +1,11 @@ +package com.casic.app.smartwell.extensions + +import android.view.animation.LinearInterpolator +import android.widget.ImageView + +fun ImageView.arrowAnimation(angle: Float) { + val animation = this.animate() + animation.duration = 300 + animation.interpolator = LinearInterpolator() + animation.rotation(angle) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt new file mode 100644 index 0000000..618e273 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/model/ExpandableDataModel.kt @@ -0,0 +1,3 @@ +package com.casic.app.smartwell.model + +class ExpandableDataModel(var orderStateTime: String?, var operationPerson: String?) \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt index 8d6fc84..eae05a6 100644 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -12,15 +12,13 @@ class TimeLineItemDecoration(private val context: Context) : RecyclerView.ItemDecoration() { private val circlePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) - private val linePaint: Paint + private val linePaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG) private val radius: Int init { - circlePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint = Paint(Paint.ANTI_ALIAS_FLAG) - linePaint.color = R.color.mainThemeColor.convertColor(context) - linePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() - radius = SizeUtil.dp2px(context, 8f) + linePaint.color = R.color.hintTextColor.convertColor(context) + linePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + radius = SizeUtil.dp2px(context, 7.5f) } override fun getItemOffsets( @@ -28,7 +26,7 @@ parent: RecyclerView, state: RecyclerView.State ) { super.getItemOffsets(outRect, view, parent, state) - outRect.left = SizeUtil.dp2px(context, 20f) + outRect.left = SizeUtil.dp2px(context, 16.5f) } override fun onDraw(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) { @@ -56,11 +54,19 @@ val childPosition = parent.getChildLayoutPosition(childView) // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.style = Paint.Style.FILL - } else { - circlePaint.style = Paint.Style.STROKE - circlePaint.strokeWidth = SizeUtil.dp2px(context, 2f).toFloat() + when (childPosition) { + 0 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.hintTextColor.convertColor(context) + } + itemCount - 1 -> { + circlePaint.style = Paint.Style.FILL + circlePaint.color = R.color.mainThemeColor.convertColor(context) + } + else -> { + circlePaint.style = Paint.Style.STROKE + circlePaint.strokeWidth = SizeUtil.dp2px(context, 1.5f).toFloat() + } } canvas.drawCircle( startX, 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 fc3ccd7..1453d9c 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,7 +12,6 @@ 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( @@ -49,7 +48,6 @@ //绑定流程进展数据 val orderFlowRecyclerView = findViewById(R.id.orderFlowRecyclerView) orderFlowRecyclerView.layoutManager = LinearLayoutManager(ctx) - orderFlowRecyclerView.addItemDecoration(TimeLineItemDecoration(ctx)) orderFlowRecyclerView.adapter = OrderFlowAdapter() val dismissView = findViewById(R.id.dismissView) diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index 8fdd4bb..50f696f 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/layout/dialog_bottom_sheet.xml b/app/src/main/res/layout/dialog_bottom_sheet.xml index e95b28c..e885505 100644 --- a/app/src/main/res/layout/dialog_bottom_sheet.xml +++ b/app/src/main/res/layout/dialog_bottom_sheet.xml @@ -31,7 +31,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_order_completed_recycleview.xml b/app/src/main/res/layout/item_order_completed_recycleview.xml index 35cd7e6..fea62e6 100644 --- a/app/src/main/res/layout/item_order_completed_recycleview.xml +++ b/app/src/main/res/layout/item_order_completed_recycleview.xml @@ -71,20 +71,48 @@ android:textSize="@dimen/textFontSize" /> - + android:paddingVertical="@dimen/dp_5"> + + + + + + + + + - + android:paddingVertical="@dimen/dp_5"> + + + + + + + + + - + android:paddingVertical="@dimen/dp_5"> + + + + + + + + +