diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index e611171..366a106 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.init import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing @@ -24,7 +25,6 @@ /** * @author a203 * @description 各种图初始化配置类 - * @package com.casic.dcms.utils * @date 2022/2/15 16:24 * @email 290677893@qq.com */ @@ -37,6 +37,9 @@ xAxisDate: MutableList, entryModels: List ) { + //每次加载数据都初始化折线图 + chart.init() + //绑定数据 val lineDataSets: MutableList = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index e611171..366a106 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.init import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing @@ -24,7 +25,6 @@ /** * @author a203 * @description 各种图初始化配置类 - * @package com.casic.dcms.utils * @date 2022/2/15 16:24 * @email 290677893@qq.com */ @@ -37,6 +37,9 @@ xAxisDate: MutableList, entryModels: List ) { + //每次加载数据都初始化折线图 + chart.init() + //绑定数据 val lineDataSets: MutableList = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 9be9a64..4e3e0aa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.view +import android.content.Context import android.view.View import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider @@ -10,6 +11,7 @@ import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry import kotlinx.android.synthetic.main.activity_expanded.* import kotlinx.android.synthetic.main.activity_main.waterLineChart @@ -20,8 +22,8 @@ class ExpandedActivity : BaseActivity() { private val kTag = "ExpandedActivity" + private val context: Context = this@ExpandedActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private var startDate = "" override fun initLayoutView(): Int = R.layout.activity_expanded @@ -47,44 +49,64 @@ when (position) { 0 -> { //本年度 - startDate = "$year-01-01" + waterViewModel.waterCountByDay( + Constant.AREA_ID, "$year-01-01", time.timestampToDate() + ) } 1 -> { //本季度 - when (time.getQuarterOfYear()) { - 1 -> { - startDate = "$year-01-01" - } - 2 -> { - startDate = "$year-04-01" - } - 3 -> { - startDate = "$year-07-01" - } - 4 -> { - startDate = "$year-10-01" - } + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" } + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, time.timestampToDate() + ) } 2 -> { //近30日 - startDate = time.timestampToLastMonthDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, + time.timestampToLastMonthDate(), time.timestampToDate() + ) } 3 -> { //近7日 - startDate = time.timestampToLastWeekDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate() + ) } 4 -> { //今日 - startDate = time.timestampToDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToDate(), time.timestampToDate() + ) } 5 -> { + DateSelectDialog.Builder() + .setContext(context) + .setFragmentManager(supportFragmentManager) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, endDate + ) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + periodSpinner.setSelection(3) + } + }).build().show() } } - //初始化折线图,X轴从0开始 - waterLineChart.init() - waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -100,7 +122,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index e611171..366a106 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.init import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing @@ -24,7 +25,6 @@ /** * @author a203 * @description 各种图初始化配置类 - * @package com.casic.dcms.utils * @date 2022/2/15 16:24 * @email 290677893@qq.com */ @@ -37,6 +37,9 @@ xAxisDate: MutableList, entryModels: List ) { + //每次加载数据都初始化折线图 + chart.init() + //绑定数据 val lineDataSets: MutableList = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 9be9a64..4e3e0aa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.view +import android.content.Context import android.view.View import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider @@ -10,6 +11,7 @@ import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry import kotlinx.android.synthetic.main.activity_expanded.* import kotlinx.android.synthetic.main.activity_main.waterLineChart @@ -20,8 +22,8 @@ class ExpandedActivity : BaseActivity() { private val kTag = "ExpandedActivity" + private val context: Context = this@ExpandedActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private var startDate = "" override fun initLayoutView(): Int = R.layout.activity_expanded @@ -47,44 +49,64 @@ when (position) { 0 -> { //本年度 - startDate = "$year-01-01" + waterViewModel.waterCountByDay( + Constant.AREA_ID, "$year-01-01", time.timestampToDate() + ) } 1 -> { //本季度 - when (time.getQuarterOfYear()) { - 1 -> { - startDate = "$year-01-01" - } - 2 -> { - startDate = "$year-04-01" - } - 3 -> { - startDate = "$year-07-01" - } - 4 -> { - startDate = "$year-10-01" - } + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" } + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, time.timestampToDate() + ) } 2 -> { //近30日 - startDate = time.timestampToLastMonthDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, + time.timestampToLastMonthDate(), time.timestampToDate() + ) } 3 -> { //近7日 - startDate = time.timestampToLastWeekDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate() + ) } 4 -> { //今日 - startDate = time.timestampToDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToDate(), time.timestampToDate() + ) } 5 -> { + DateSelectDialog.Builder() + .setContext(context) + .setFragmentManager(supportFragmentManager) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, endDate + ) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + periodSpinner.setSelection(3) + } + }).build().show() } } - //初始化折线图,X轴从0开始 - waterLineChart.init() - waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -100,7 +122,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index ad61a8d..b8bd623 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -127,7 +127,6 @@ val time = System.currentTimeMillis() val startDate = time.timestampToLastWeekDate() val endDate = time.timestampToDate() - waterLineChart.init() //一周折线图数据 waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { @@ -135,7 +134,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index e611171..366a106 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.init import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing @@ -24,7 +25,6 @@ /** * @author a203 * @description 各种图初始化配置类 - * @package com.casic.dcms.utils * @date 2022/2/15 16:24 * @email 290677893@qq.com */ @@ -37,6 +37,9 @@ xAxisDate: MutableList, entryModels: List ) { + //每次加载数据都初始化折线图 + chart.init() + //绑定数据 val lineDataSets: MutableList = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 9be9a64..4e3e0aa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.view +import android.content.Context import android.view.View import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider @@ -10,6 +11,7 @@ import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry import kotlinx.android.synthetic.main.activity_expanded.* import kotlinx.android.synthetic.main.activity_main.waterLineChart @@ -20,8 +22,8 @@ class ExpandedActivity : BaseActivity() { private val kTag = "ExpandedActivity" + private val context: Context = this@ExpandedActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private var startDate = "" override fun initLayoutView(): Int = R.layout.activity_expanded @@ -47,44 +49,64 @@ when (position) { 0 -> { //本年度 - startDate = "$year-01-01" + waterViewModel.waterCountByDay( + Constant.AREA_ID, "$year-01-01", time.timestampToDate() + ) } 1 -> { //本季度 - when (time.getQuarterOfYear()) { - 1 -> { - startDate = "$year-01-01" - } - 2 -> { - startDate = "$year-04-01" - } - 3 -> { - startDate = "$year-07-01" - } - 4 -> { - startDate = "$year-10-01" - } + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" } + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, time.timestampToDate() + ) } 2 -> { //近30日 - startDate = time.timestampToLastMonthDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, + time.timestampToLastMonthDate(), time.timestampToDate() + ) } 3 -> { //近7日 - startDate = time.timestampToLastWeekDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate() + ) } 4 -> { //今日 - startDate = time.timestampToDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToDate(), time.timestampToDate() + ) } 5 -> { + DateSelectDialog.Builder() + .setContext(context) + .setFragmentManager(supportFragmentManager) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, endDate + ) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + periodSpinner.setSelection(3) + } + }).build().show() } } - //初始化折线图,X轴从0开始 - waterLineChart.init() - waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -100,7 +122,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index ad61a8d..b8bd623 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -127,7 +127,6 @@ val time = System.currentTimeMillis() val startDate = time.timestampToLastWeekDate() val endDate = time.timestampToDate() - waterLineChart.init() //一周折线图数据 waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { @@ -135,7 +134,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt new file mode 100644 index 0000000..7d1c1cf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -0,0 +1,127 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.Gravity +import androidx.fragment.app.FragmentManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.utils.Constant +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.dialog_select_date.* + +class DateSelectDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + + private val fragmentManager: FragmentManager = builder.fragmentManager + private val title: String = builder.title + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var fragmentManager: FragmentManager + lateinit var title: String + lateinit var negativeBtn: String + lateinit var positiveBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setTitle(title: String): Builder { + this.title = title + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): DateSelectDialog { + return DateSelectDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) + setContentView(R.layout.dialog_select_date) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.isNotBlank()) { + dialogTitleView.text = title + } + + startDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + endDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + endDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + listener.onCancelClick() + this.dismiss() + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + listener.onConfirmClick(startDateView.text.toString(), endDateView.text.toString()) + this.dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(startDate: String, endDate: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index e611171..366a106 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.init import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing @@ -24,7 +25,6 @@ /** * @author a203 * @description 各种图初始化配置类 - * @package com.casic.dcms.utils * @date 2022/2/15 16:24 * @email 290677893@qq.com */ @@ -37,6 +37,9 @@ xAxisDate: MutableList, entryModels: List ) { + //每次加载数据都初始化折线图 + chart.init() + //绑定数据 val lineDataSets: MutableList = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 9be9a64..4e3e0aa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.view +import android.content.Context import android.view.View import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider @@ -10,6 +11,7 @@ import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry import kotlinx.android.synthetic.main.activity_expanded.* import kotlinx.android.synthetic.main.activity_main.waterLineChart @@ -20,8 +22,8 @@ class ExpandedActivity : BaseActivity() { private val kTag = "ExpandedActivity" + private val context: Context = this@ExpandedActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private var startDate = "" override fun initLayoutView(): Int = R.layout.activity_expanded @@ -47,44 +49,64 @@ when (position) { 0 -> { //本年度 - startDate = "$year-01-01" + waterViewModel.waterCountByDay( + Constant.AREA_ID, "$year-01-01", time.timestampToDate() + ) } 1 -> { //本季度 - when (time.getQuarterOfYear()) { - 1 -> { - startDate = "$year-01-01" - } - 2 -> { - startDate = "$year-04-01" - } - 3 -> { - startDate = "$year-07-01" - } - 4 -> { - startDate = "$year-10-01" - } + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" } + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, time.timestampToDate() + ) } 2 -> { //近30日 - startDate = time.timestampToLastMonthDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, + time.timestampToLastMonthDate(), time.timestampToDate() + ) } 3 -> { //近7日 - startDate = time.timestampToLastWeekDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate() + ) } 4 -> { //今日 - startDate = time.timestampToDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToDate(), time.timestampToDate() + ) } 5 -> { + DateSelectDialog.Builder() + .setContext(context) + .setFragmentManager(supportFragmentManager) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, endDate + ) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + periodSpinner.setSelection(3) + } + }).build().show() } } - //初始化折线图,X轴从0开始 - waterLineChart.init() - waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -100,7 +122,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index ad61a8d..b8bd623 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -127,7 +127,6 @@ val time = System.currentTimeMillis() val startDate = time.timestampToLastWeekDate() val endDate = time.timestampToDate() - waterLineChart.init() //一周折线图数据 waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { @@ -135,7 +134,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt new file mode 100644 index 0000000..7d1c1cf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -0,0 +1,127 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.Gravity +import androidx.fragment.app.FragmentManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.utils.Constant +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.dialog_select_date.* + +class DateSelectDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + + private val fragmentManager: FragmentManager = builder.fragmentManager + private val title: String = builder.title + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var fragmentManager: FragmentManager + lateinit var title: String + lateinit var negativeBtn: String + lateinit var positiveBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setTitle(title: String): Builder { + this.title = title + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): DateSelectDialog { + return DateSelectDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) + setContentView(R.layout.dialog_select_date) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.isNotBlank()) { + dialogTitleView.text = title + } + + startDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + endDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + endDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + listener.onCancelClick() + this.dismiss() + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + listener.onConfirmClick(startDateView.text.toString(), endDateView.text.toString()) + this.dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(startDate: String, endDate: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt index 67888de..ebf3810 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt @@ -11,6 +11,7 @@ import java.util.* class DetailsMarkerView(context: Context?) : MarkerView(context, R.layout.popu_marker) { + private val decimalFormat = DecimalFormat("##0.00") private val dayView: TextView = findViewById(R.id.dayView) private val factoryView: TextView = findViewById(R.id.factoryView) diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index e611171..366a106 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.init import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing @@ -24,7 +25,6 @@ /** * @author a203 * @description 各种图初始化配置类 - * @package com.casic.dcms.utils * @date 2022/2/15 16:24 * @email 290677893@qq.com */ @@ -37,6 +37,9 @@ xAxisDate: MutableList, entryModels: List ) { + //每次加载数据都初始化折线图 + chart.init() + //绑定数据 val lineDataSets: MutableList = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 9be9a64..4e3e0aa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.view +import android.content.Context import android.view.View import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider @@ -10,6 +11,7 @@ import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry import kotlinx.android.synthetic.main.activity_expanded.* import kotlinx.android.synthetic.main.activity_main.waterLineChart @@ -20,8 +22,8 @@ class ExpandedActivity : BaseActivity() { private val kTag = "ExpandedActivity" + private val context: Context = this@ExpandedActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private var startDate = "" override fun initLayoutView(): Int = R.layout.activity_expanded @@ -47,44 +49,64 @@ when (position) { 0 -> { //本年度 - startDate = "$year-01-01" + waterViewModel.waterCountByDay( + Constant.AREA_ID, "$year-01-01", time.timestampToDate() + ) } 1 -> { //本季度 - when (time.getQuarterOfYear()) { - 1 -> { - startDate = "$year-01-01" - } - 2 -> { - startDate = "$year-04-01" - } - 3 -> { - startDate = "$year-07-01" - } - 4 -> { - startDate = "$year-10-01" - } + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" } + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, time.timestampToDate() + ) } 2 -> { //近30日 - startDate = time.timestampToLastMonthDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, + time.timestampToLastMonthDate(), time.timestampToDate() + ) } 3 -> { //近7日 - startDate = time.timestampToLastWeekDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate() + ) } 4 -> { //今日 - startDate = time.timestampToDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToDate(), time.timestampToDate() + ) } 5 -> { + DateSelectDialog.Builder() + .setContext(context) + .setFragmentManager(supportFragmentManager) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, endDate + ) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + periodSpinner.setSelection(3) + } + }).build().show() } } - //初始化折线图,X轴从0开始 - waterLineChart.init() - waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -100,7 +122,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index ad61a8d..b8bd623 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -127,7 +127,6 @@ val time = System.currentTimeMillis() val startDate = time.timestampToLastWeekDate() val endDate = time.timestampToDate() - waterLineChart.init() //一周折线图数据 waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { @@ -135,7 +134,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt new file mode 100644 index 0000000..7d1c1cf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -0,0 +1,127 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.Gravity +import androidx.fragment.app.FragmentManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.utils.Constant +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.dialog_select_date.* + +class DateSelectDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + + private val fragmentManager: FragmentManager = builder.fragmentManager + private val title: String = builder.title + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var fragmentManager: FragmentManager + lateinit var title: String + lateinit var negativeBtn: String + lateinit var positiveBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setTitle(title: String): Builder { + this.title = title + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): DateSelectDialog { + return DateSelectDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) + setContentView(R.layout.dialog_select_date) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.isNotBlank()) { + dialogTitleView.text = title + } + + startDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + endDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + endDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + listener.onCancelClick() + this.dismiss() + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + listener.onConfirmClick(startDateView.text.toString(), endDateView.text.toString()) + this.dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(startDate: String, endDate: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt index 67888de..ebf3810 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt @@ -11,6 +11,7 @@ import java.util.* class DetailsMarkerView(context: Context?) : MarkerView(context, R.layout.popu_marker) { + private val decimalFormat = DecimalFormat("##0.00") private val dayView: TextView = findViewById(R.id.dayView) private val factoryView: TextView = findViewById(R.id.factoryView) diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml index 9389063..7fc986f 100644 --- a/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml @@ -8,5 +8,5 @@ + android:color="@color/hintTextColor" /> \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index e611171..366a106 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.init import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing @@ -24,7 +25,6 @@ /** * @author a203 * @description 各种图初始化配置类 - * @package com.casic.dcms.utils * @date 2022/2/15 16:24 * @email 290677893@qq.com */ @@ -37,6 +37,9 @@ xAxisDate: MutableList, entryModels: List ) { + //每次加载数据都初始化折线图 + chart.init() + //绑定数据 val lineDataSets: MutableList = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 9be9a64..4e3e0aa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.view +import android.content.Context import android.view.View import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider @@ -10,6 +11,7 @@ import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry import kotlinx.android.synthetic.main.activity_expanded.* import kotlinx.android.synthetic.main.activity_main.waterLineChart @@ -20,8 +22,8 @@ class ExpandedActivity : BaseActivity() { private val kTag = "ExpandedActivity" + private val context: Context = this@ExpandedActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private var startDate = "" override fun initLayoutView(): Int = R.layout.activity_expanded @@ -47,44 +49,64 @@ when (position) { 0 -> { //本年度 - startDate = "$year-01-01" + waterViewModel.waterCountByDay( + Constant.AREA_ID, "$year-01-01", time.timestampToDate() + ) } 1 -> { //本季度 - when (time.getQuarterOfYear()) { - 1 -> { - startDate = "$year-01-01" - } - 2 -> { - startDate = "$year-04-01" - } - 3 -> { - startDate = "$year-07-01" - } - 4 -> { - startDate = "$year-10-01" - } + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" } + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, time.timestampToDate() + ) } 2 -> { //近30日 - startDate = time.timestampToLastMonthDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, + time.timestampToLastMonthDate(), time.timestampToDate() + ) } 3 -> { //近7日 - startDate = time.timestampToLastWeekDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate() + ) } 4 -> { //今日 - startDate = time.timestampToDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToDate(), time.timestampToDate() + ) } 5 -> { + DateSelectDialog.Builder() + .setContext(context) + .setFragmentManager(supportFragmentManager) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, endDate + ) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + periodSpinner.setSelection(3) + } + }).build().show() } } - //初始化折线图,X轴从0开始 - waterLineChart.init() - waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -100,7 +122,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index ad61a8d..b8bd623 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -127,7 +127,6 @@ val time = System.currentTimeMillis() val startDate = time.timestampToLastWeekDate() val endDate = time.timestampToDate() - waterLineChart.init() //一周折线图数据 waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { @@ -135,7 +134,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt new file mode 100644 index 0000000..7d1c1cf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -0,0 +1,127 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.Gravity +import androidx.fragment.app.FragmentManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.utils.Constant +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.dialog_select_date.* + +class DateSelectDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + + private val fragmentManager: FragmentManager = builder.fragmentManager + private val title: String = builder.title + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var fragmentManager: FragmentManager + lateinit var title: String + lateinit var negativeBtn: String + lateinit var positiveBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setTitle(title: String): Builder { + this.title = title + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): DateSelectDialog { + return DateSelectDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) + setContentView(R.layout.dialog_select_date) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.isNotBlank()) { + dialogTitleView.text = title + } + + startDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + endDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + endDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + listener.onCancelClick() + this.dismiss() + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + listener.onConfirmClick(startDateView.text.toString(), endDateView.text.toString()) + this.dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(startDate: String, endDate: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt index 67888de..ebf3810 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt @@ -11,6 +11,7 @@ import java.util.* class DetailsMarkerView(context: Context?) : MarkerView(context, R.layout.popu_marker) { + private val decimalFormat = DecimalFormat("##0.00") private val dayView: TextView = findViewById(R.id.dayView) private val factoryView: TextView = findViewById(R.id.factoryView) diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml index 9389063..7fc986f 100644 --- a/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml @@ -8,5 +8,5 @@ + android:color="@color/hintTextColor" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_right.xml b/app/src/main/res/drawable/ic_left_right.xml new file mode 100644 index 0000000..e80b0f5 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index e611171..366a106 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.init import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing @@ -24,7 +25,6 @@ /** * @author a203 * @description 各种图初始化配置类 - * @package com.casic.dcms.utils * @date 2022/2/15 16:24 * @email 290677893@qq.com */ @@ -37,6 +37,9 @@ xAxisDate: MutableList, entryModels: List ) { + //每次加载数据都初始化折线图 + chart.init() + //绑定数据 val lineDataSets: MutableList = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 9be9a64..4e3e0aa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.view +import android.content.Context import android.view.View import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider @@ -10,6 +11,7 @@ import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry import kotlinx.android.synthetic.main.activity_expanded.* import kotlinx.android.synthetic.main.activity_main.waterLineChart @@ -20,8 +22,8 @@ class ExpandedActivity : BaseActivity() { private val kTag = "ExpandedActivity" + private val context: Context = this@ExpandedActivity private lateinit var waterViewModel: WaterStatisticsViewModel - private var startDate = "" override fun initLayoutView(): Int = R.layout.activity_expanded @@ -47,44 +49,64 @@ when (position) { 0 -> { //本年度 - startDate = "$year-01-01" + waterViewModel.waterCountByDay( + Constant.AREA_ID, "$year-01-01", time.timestampToDate() + ) } 1 -> { //本季度 - when (time.getQuarterOfYear()) { - 1 -> { - startDate = "$year-01-01" - } - 2 -> { - startDate = "$year-04-01" - } - 3 -> { - startDate = "$year-07-01" - } - 4 -> { - startDate = "$year-10-01" - } + val startDate = when (time.getQuarterOfYear()) { + 1 -> "$year-01-01" + 2 -> "$year-04-01" + 3 -> "$year-07-01" + 4 -> "$year-10-01" + else -> "" } + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, time.timestampToDate() + ) } 2 -> { //近30日 - startDate = time.timestampToLastMonthDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, + time.timestampToLastMonthDate(), time.timestampToDate() + ) } 3 -> { //近7日 - startDate = time.timestampToLastWeekDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate() + ) } 4 -> { //今日 - startDate = time.timestampToDate() + waterViewModel.waterCountByDay( + Constant.AREA_ID, time.timestampToDate(), time.timestampToDate() + ) } 5 -> { + DateSelectDialog.Builder() + .setContext(context) + .setFragmentManager(supportFragmentManager) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + waterViewModel.waterCountByDay( + Constant.AREA_ID, startDate, endDate + ) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + periodSpinner.setSelection(3) + } + }).build().show() } } - //初始化折线图,X轴从0开始 - waterLineChart.init() - waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) } override fun onNothingSelected(parent: AdapterView<*>?) { @@ -100,7 +122,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index ad61a8d..b8bd623 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -127,7 +127,6 @@ val time = System.currentTimeMillis() val startDate = time.timestampToLastWeekDate() val endDate = time.timestampToDate() - waterLineChart.init() //一周折线图数据 waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { @@ -135,7 +134,7 @@ val dataModel = it.data!! dataModel.forEach { dateModel -> val split = dateModel.date.toString().split("-") - xAxisDate.add("${split[1]}-${split[2]}") + xAxisDate.add("${split[1]}/${split[2]}") } //确定有几条折线 val lines = dataModel[0].data?.size!! diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt new file mode 100644 index 0000000..7d1c1cf --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -0,0 +1,127 @@ +package com.casic.qd.smartwell.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.Gravity +import androidx.fragment.app.FragmentManager +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.initDialogLayoutParams +import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.utils.Constant +import com.jzxiang.pickerview.TimePickerDialog +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.dialog_select_date.* + +class DateSelectDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + + private val fragmentManager: FragmentManager = builder.fragmentManager + private val title: String = builder.title + private val negativeBtn: String = builder.negativeBtn + private val positiveBtn: String = builder.positiveBtn + private val listener: OnDialogButtonClickListener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var fragmentManager: FragmentManager + lateinit var title: String + lateinit var negativeBtn: String + lateinit var positiveBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setTitle(title: String): Builder { + this.title = title + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): DateSelectDialog { + return DateSelectDialog(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.75f) + setContentView(R.layout.dialog_select_date) + setCancelable(false) + setCanceledOnTouchOutside(false) + + if (title.isNotBlank()) { + dialogTitleView.text = title + } + + startDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + startDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + endDateView.setOnClickListener { + TimePickerDialog.Builder() + .setThemeColor(R.color.mainThemeColor.convertColor()) + .setTitleStringId("请选择起始时间") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH_DAY) + .setCallBack { _: TimePickerDialog?, millSeconds: Long -> + endDateView.setText(millSeconds.timestampToDate()) + }.build().show(fragmentManager, "YEAR_MONTH_DAY") + } + + dialogCancelButton.text = negativeBtn + dialogCancelButton.setOnClickListener { + listener.onCancelClick() + this.dismiss() + } + + dialogConfirmButton.text = positiveBtn + dialogConfirmButton.setOnClickListener { + listener.onConfirmClick(startDateView.text.toString(), endDateView.text.toString()) + this.dismiss() + } + } + + interface OnDialogButtonClickListener { + fun onConfirmClick(startDate: String, endDate: String) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt index 67888de..ebf3810 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt @@ -11,6 +11,7 @@ import java.util.* class DetailsMarkerView(context: Context?) : MarkerView(context, R.layout.popu_marker) { + private val decimalFormat = DecimalFormat("##0.00") private val dayView: TextView = findViewById(R.id.dayView) private val factoryView: TextView = findViewById(R.id.factoryView) diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml index 9389063..7fc986f 100644 --- a/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml +++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_5.xml @@ -8,5 +8,5 @@ + android:color="@color/hintTextColor" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_left_right.xml b/app/src/main/res/drawable/ic_left_right.xml new file mode 100644 index 0000000..e80b0f5 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/dialog_cancel_alarm.xml b/app/src/main/res/layout/dialog_cancel_alarm.xml index 8308e1a..aa6fe68 100644 --- a/app/src/main/res/layout/dialog_cancel_alarm.xml +++ b/app/src/main/res/layout/dialog_cancel_alarm.xml @@ -26,7 +26,7 @@ + android:background="@color/hintTextColor" /> + android:background="@color/hintTextColor" /> + android:background="@color/hintTextColor" />