diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
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
deleted file mode 100644
index 4e3e0aa..0000000
--- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.casic.qd.smartwell.view
-
-import android.content.Context
-import android.view.View
-import android.widget.AdapterView
-import androidx.lifecycle.ViewModelProvider
-import com.casic.qd.smartwell.R
-import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.*
-import com.casic.qd.smartwell.model.LineChartEntryModel
-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
-import java.util.*
-import kotlin.collections.ArrayList
-
-
-class ExpandedActivity : BaseActivity() {
-
- private val kTag = "ExpandedActivity"
- private val context: Context = this@ExpandedActivity
- private lateinit var waterViewModel: WaterStatisticsViewModel
-
- override fun initLayoutView(): Int = R.layout.activity_expanded
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
- }
-
- override fun initEvent() {
- //默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?,
- position: Int, id: Long
- ) {
- val time = System.currentTimeMillis()
- val calendar = Calendar.getInstance()
- val year: Int = calendar.get(Calendar.YEAR)
- when (position) {
- 0 -> {
- //本年度
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, "$year-01-01", time.timestampToDate()
- )
- }
- 1 -> {
- //本季度
- 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日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID,
- time.timestampToLastMonthDate(), time.timestampToDate()
- )
- }
- 3 -> {
- //近7日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
- )
- }
- 4 -> {
- //今日
- 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()
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- waterViewModel.areaDataModel.observe(this, {
- if (it.code == 200) {
- val xAxisDate: MutableList = ArrayList()
- val entryModels: MutableList = ArrayList()
-
- val dataModel = it.data!!
- dataModel.forEach { dateModel ->
- val split = dateModel.date.toString().split("-")
- xAxisDate.add("${split[1]}/${split[2]}")
- }
- //确定有几条折线
- val lines = dataModel[0].data?.size!!
- for (i in 0 until lines) {
- //每个entries都是一条折线
- val entries: ArrayList = ArrayList()
- val entryModel = LineChartEntryModel()
- dataModel.forEachIndexed { j, dataBean ->
- entryModel.lineColor = Constant.COLORS[i].convertColor()
-
- val areaData = dataBean.data!![i]
- entries.add(
- Entry(
- j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
- )
- )
- }
- entryModel.entryList = entries
- entryModels.add(entryModel)
- }
- ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
- }
- })
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
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
deleted file mode 100644
index 4e3e0aa..0000000
--- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.casic.qd.smartwell.view
-
-import android.content.Context
-import android.view.View
-import android.widget.AdapterView
-import androidx.lifecycle.ViewModelProvider
-import com.casic.qd.smartwell.R
-import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.*
-import com.casic.qd.smartwell.model.LineChartEntryModel
-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
-import java.util.*
-import kotlin.collections.ArrayList
-
-
-class ExpandedActivity : BaseActivity() {
-
- private val kTag = "ExpandedActivity"
- private val context: Context = this@ExpandedActivity
- private lateinit var waterViewModel: WaterStatisticsViewModel
-
- override fun initLayoutView(): Int = R.layout.activity_expanded
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
- }
-
- override fun initEvent() {
- //默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?,
- position: Int, id: Long
- ) {
- val time = System.currentTimeMillis()
- val calendar = Calendar.getInstance()
- val year: Int = calendar.get(Calendar.YEAR)
- when (position) {
- 0 -> {
- //本年度
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, "$year-01-01", time.timestampToDate()
- )
- }
- 1 -> {
- //本季度
- 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日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID,
- time.timestampToLastMonthDate(), time.timestampToDate()
- )
- }
- 3 -> {
- //近7日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
- )
- }
- 4 -> {
- //今日
- 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()
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- waterViewModel.areaDataModel.observe(this, {
- if (it.code == 200) {
- val xAxisDate: MutableList = ArrayList()
- val entryModels: MutableList = ArrayList()
-
- val dataModel = it.data!!
- dataModel.forEach { dateModel ->
- val split = dateModel.date.toString().split("-")
- xAxisDate.add("${split[1]}/${split[2]}")
- }
- //确定有几条折线
- val lines = dataModel[0].data?.size!!
- for (i in 0 until lines) {
- //每个entries都是一条折线
- val entries: ArrayList = ArrayList()
- val entryModel = LineChartEntryModel()
- dataModel.forEachIndexed { j, dataBean ->
- entryModel.lineColor = Constant.COLORS[i].convertColor()
-
- val areaData = dataBean.data!![i]
- entries.add(
- Entry(
- j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
- )
- )
- }
- entryModel.entryList = entries
- entryModels.add(entryModel)
- }
- ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
- }
- })
- }
-}
\ No newline at end of file
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 b8bd623..ae9df20 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
@@ -32,7 +32,6 @@
class MainActivity : BaseActivity() {
- private val kTag = "MainActivity"
private val context: Context = this@MainActivity
private var clickTime: Long = 0
private lateinit var waterViewModel: WaterStatisticsViewModel
@@ -129,7 +128,7 @@
val endDate = time.timestampToDate()
//一周折线图数据
waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate)
- waterViewModel.areaDataModel.observe(this, {
+ waterViewModel.dayDataModel.observe(this, {
if (it.code == 200) {
val dataModel = it.data!!
dataModel.forEach { dateModel ->
@@ -160,7 +159,7 @@
})
expandView.setOnClickListener {
- navigatePageTo(ExpandedActivity::class.java)
+ navigatePageTo(WaterExpandedActivity::class.java)
}
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
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
deleted file mode 100644
index 4e3e0aa..0000000
--- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.casic.qd.smartwell.view
-
-import android.content.Context
-import android.view.View
-import android.widget.AdapterView
-import androidx.lifecycle.ViewModelProvider
-import com.casic.qd.smartwell.R
-import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.*
-import com.casic.qd.smartwell.model.LineChartEntryModel
-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
-import java.util.*
-import kotlin.collections.ArrayList
-
-
-class ExpandedActivity : BaseActivity() {
-
- private val kTag = "ExpandedActivity"
- private val context: Context = this@ExpandedActivity
- private lateinit var waterViewModel: WaterStatisticsViewModel
-
- override fun initLayoutView(): Int = R.layout.activity_expanded
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
- }
-
- override fun initEvent() {
- //默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?,
- position: Int, id: Long
- ) {
- val time = System.currentTimeMillis()
- val calendar = Calendar.getInstance()
- val year: Int = calendar.get(Calendar.YEAR)
- when (position) {
- 0 -> {
- //本年度
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, "$year-01-01", time.timestampToDate()
- )
- }
- 1 -> {
- //本季度
- 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日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID,
- time.timestampToLastMonthDate(), time.timestampToDate()
- )
- }
- 3 -> {
- //近7日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
- )
- }
- 4 -> {
- //今日
- 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()
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- waterViewModel.areaDataModel.observe(this, {
- if (it.code == 200) {
- val xAxisDate: MutableList = ArrayList()
- val entryModels: MutableList = ArrayList()
-
- val dataModel = it.data!!
- dataModel.forEach { dateModel ->
- val split = dateModel.date.toString().split("-")
- xAxisDate.add("${split[1]}/${split[2]}")
- }
- //确定有几条折线
- val lines = dataModel[0].data?.size!!
- for (i in 0 until lines) {
- //每个entries都是一条折线
- val entries: ArrayList = ArrayList()
- val entryModel = LineChartEntryModel()
- dataModel.forEachIndexed { j, dataBean ->
- entryModel.lineColor = Constant.COLORS[i].convertColor()
-
- val areaData = dataBean.data!![i]
- entries.add(
- Entry(
- j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
- )
- )
- }
- entryModel.entryList = entries
- entryModels.add(entryModel)
- }
- ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
- }
- })
- }
-}
\ No newline at end of file
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 b8bd623..ae9df20 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
@@ -32,7 +32,6 @@
class MainActivity : BaseActivity() {
- private val kTag = "MainActivity"
private val context: Context = this@MainActivity
private var clickTime: Long = 0
private lateinit var waterViewModel: WaterStatisticsViewModel
@@ -129,7 +128,7 @@
val endDate = time.timestampToDate()
//一周折线图数据
waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate)
- waterViewModel.areaDataModel.observe(this, {
+ waterViewModel.dayDataModel.observe(this, {
if (it.code == 200) {
val dataModel = it.data!!
dataModel.forEach { dateModel ->
@@ -160,7 +159,7 @@
})
expandView.setOnClickListener {
- navigatePageTo(ExpandedActivity::class.java)
+ navigatePageTo(WaterExpandedActivity::class.java)
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
index 1dea700..74fc2c4 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
@@ -21,7 +21,6 @@
override fun initLayoutView(): Int = R.layout.activity_map
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "地图展示"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
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
deleted file mode 100644
index 4e3e0aa..0000000
--- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.casic.qd.smartwell.view
-
-import android.content.Context
-import android.view.View
-import android.widget.AdapterView
-import androidx.lifecycle.ViewModelProvider
-import com.casic.qd.smartwell.R
-import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.*
-import com.casic.qd.smartwell.model.LineChartEntryModel
-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
-import java.util.*
-import kotlin.collections.ArrayList
-
-
-class ExpandedActivity : BaseActivity() {
-
- private val kTag = "ExpandedActivity"
- private val context: Context = this@ExpandedActivity
- private lateinit var waterViewModel: WaterStatisticsViewModel
-
- override fun initLayoutView(): Int = R.layout.activity_expanded
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
- }
-
- override fun initEvent() {
- //默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?,
- position: Int, id: Long
- ) {
- val time = System.currentTimeMillis()
- val calendar = Calendar.getInstance()
- val year: Int = calendar.get(Calendar.YEAR)
- when (position) {
- 0 -> {
- //本年度
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, "$year-01-01", time.timestampToDate()
- )
- }
- 1 -> {
- //本季度
- 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日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID,
- time.timestampToLastMonthDate(), time.timestampToDate()
- )
- }
- 3 -> {
- //近7日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
- )
- }
- 4 -> {
- //今日
- 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()
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- waterViewModel.areaDataModel.observe(this, {
- if (it.code == 200) {
- val xAxisDate: MutableList = ArrayList()
- val entryModels: MutableList = ArrayList()
-
- val dataModel = it.data!!
- dataModel.forEach { dateModel ->
- val split = dateModel.date.toString().split("-")
- xAxisDate.add("${split[1]}/${split[2]}")
- }
- //确定有几条折线
- val lines = dataModel[0].data?.size!!
- for (i in 0 until lines) {
- //每个entries都是一条折线
- val entries: ArrayList = ArrayList()
- val entryModel = LineChartEntryModel()
- dataModel.forEachIndexed { j, dataBean ->
- entryModel.lineColor = Constant.COLORS[i].convertColor()
-
- val areaData = dataBean.data!![i]
- entries.add(
- Entry(
- j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
- )
- )
- }
- entryModel.entryList = entries
- entryModels.add(entryModel)
- }
- ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
- }
- })
- }
-}
\ No newline at end of file
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 b8bd623..ae9df20 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
@@ -32,7 +32,6 @@
class MainActivity : BaseActivity() {
- private val kTag = "MainActivity"
private val context: Context = this@MainActivity
private var clickTime: Long = 0
private lateinit var waterViewModel: WaterStatisticsViewModel
@@ -129,7 +128,7 @@
val endDate = time.timestampToDate()
//一周折线图数据
waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate)
- waterViewModel.areaDataModel.observe(this, {
+ waterViewModel.dayDataModel.observe(this, {
if (it.code == 200) {
val dataModel = it.data!!
dataModel.forEach { dateModel ->
@@ -160,7 +159,7 @@
})
expandView.setOnClickListener {
- navigatePageTo(ExpandedActivity::class.java)
+ navigatePageTo(WaterExpandedActivity::class.java)
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
index 1dea700..74fc2c4 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
@@ -21,7 +21,6 @@
override fun initLayoutView(): Int = R.layout.activity_map
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "地图展示"
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
index bb66c3f..954cf2d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.view
-import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.qd.smartwell.R
import com.casic.qd.smartwell.base.BaseActivity
@@ -30,7 +29,6 @@
override fun setupTopBarLayout() {
titleView.text = "告警查询"
- leftBackView.visibility = View.GONE
}
override fun initData() {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
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
deleted file mode 100644
index 4e3e0aa..0000000
--- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.casic.qd.smartwell.view
-
-import android.content.Context
-import android.view.View
-import android.widget.AdapterView
-import androidx.lifecycle.ViewModelProvider
-import com.casic.qd.smartwell.R
-import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.*
-import com.casic.qd.smartwell.model.LineChartEntryModel
-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
-import java.util.*
-import kotlin.collections.ArrayList
-
-
-class ExpandedActivity : BaseActivity() {
-
- private val kTag = "ExpandedActivity"
- private val context: Context = this@ExpandedActivity
- private lateinit var waterViewModel: WaterStatisticsViewModel
-
- override fun initLayoutView(): Int = R.layout.activity_expanded
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
- }
-
- override fun initEvent() {
- //默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?,
- position: Int, id: Long
- ) {
- val time = System.currentTimeMillis()
- val calendar = Calendar.getInstance()
- val year: Int = calendar.get(Calendar.YEAR)
- when (position) {
- 0 -> {
- //本年度
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, "$year-01-01", time.timestampToDate()
- )
- }
- 1 -> {
- //本季度
- 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日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID,
- time.timestampToLastMonthDate(), time.timestampToDate()
- )
- }
- 3 -> {
- //近7日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
- )
- }
- 4 -> {
- //今日
- 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()
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- waterViewModel.areaDataModel.observe(this, {
- if (it.code == 200) {
- val xAxisDate: MutableList = ArrayList()
- val entryModels: MutableList = ArrayList()
-
- val dataModel = it.data!!
- dataModel.forEach { dateModel ->
- val split = dateModel.date.toString().split("-")
- xAxisDate.add("${split[1]}/${split[2]}")
- }
- //确定有几条折线
- val lines = dataModel[0].data?.size!!
- for (i in 0 until lines) {
- //每个entries都是一条折线
- val entries: ArrayList = ArrayList()
- val entryModel = LineChartEntryModel()
- dataModel.forEachIndexed { j, dataBean ->
- entryModel.lineColor = Constant.COLORS[i].convertColor()
-
- val areaData = dataBean.data!![i]
- entries.add(
- Entry(
- j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
- )
- )
- }
- entryModel.entryList = entries
- entryModels.add(entryModel)
- }
- ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
- }
- })
- }
-}
\ No newline at end of file
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 b8bd623..ae9df20 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
@@ -32,7 +32,6 @@
class MainActivity : BaseActivity() {
- private val kTag = "MainActivity"
private val context: Context = this@MainActivity
private var clickTime: Long = 0
private lateinit var waterViewModel: WaterStatisticsViewModel
@@ -129,7 +128,7 @@
val endDate = time.timestampToDate()
//一周折线图数据
waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate)
- waterViewModel.areaDataModel.observe(this, {
+ waterViewModel.dayDataModel.observe(this, {
if (it.code == 200) {
val dataModel = it.data!!
dataModel.forEach { dateModel ->
@@ -160,7 +159,7 @@
})
expandView.setOnClickListener {
- navigatePageTo(ExpandedActivity::class.java)
+ navigatePageTo(WaterExpandedActivity::class.java)
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
index 1dea700..74fc2c4 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
@@ -21,7 +21,6 @@
override fun initLayoutView(): Int = R.layout.activity_map
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "地图展示"
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
index bb66c3f..954cf2d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.view
-import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.qd.smartwell.R
import com.casic.qd.smartwell.base.BaseActivity
@@ -30,7 +29,6 @@
override fun setupTopBarLayout() {
titleView.text = "告警查询"
- leftBackView.visibility = View.GONE
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
index 7f63c0a..a459183 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
@@ -16,7 +16,6 @@
override fun initLayoutView(): Int = R.layout.activity_search_record
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "记录查询"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
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
deleted file mode 100644
index 4e3e0aa..0000000
--- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.casic.qd.smartwell.view
-
-import android.content.Context
-import android.view.View
-import android.widget.AdapterView
-import androidx.lifecycle.ViewModelProvider
-import com.casic.qd.smartwell.R
-import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.*
-import com.casic.qd.smartwell.model.LineChartEntryModel
-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
-import java.util.*
-import kotlin.collections.ArrayList
-
-
-class ExpandedActivity : BaseActivity() {
-
- private val kTag = "ExpandedActivity"
- private val context: Context = this@ExpandedActivity
- private lateinit var waterViewModel: WaterStatisticsViewModel
-
- override fun initLayoutView(): Int = R.layout.activity_expanded
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
- }
-
- override fun initEvent() {
- //默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?,
- position: Int, id: Long
- ) {
- val time = System.currentTimeMillis()
- val calendar = Calendar.getInstance()
- val year: Int = calendar.get(Calendar.YEAR)
- when (position) {
- 0 -> {
- //本年度
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, "$year-01-01", time.timestampToDate()
- )
- }
- 1 -> {
- //本季度
- 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日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID,
- time.timestampToLastMonthDate(), time.timestampToDate()
- )
- }
- 3 -> {
- //近7日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
- )
- }
- 4 -> {
- //今日
- 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()
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- waterViewModel.areaDataModel.observe(this, {
- if (it.code == 200) {
- val xAxisDate: MutableList = ArrayList()
- val entryModels: MutableList = ArrayList()
-
- val dataModel = it.data!!
- dataModel.forEach { dateModel ->
- val split = dateModel.date.toString().split("-")
- xAxisDate.add("${split[1]}/${split[2]}")
- }
- //确定有几条折线
- val lines = dataModel[0].data?.size!!
- for (i in 0 until lines) {
- //每个entries都是一条折线
- val entries: ArrayList = ArrayList()
- val entryModel = LineChartEntryModel()
- dataModel.forEachIndexed { j, dataBean ->
- entryModel.lineColor = Constant.COLORS[i].convertColor()
-
- val areaData = dataBean.data!![i]
- entries.add(
- Entry(
- j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
- )
- )
- }
- entryModel.entryList = entries
- entryModels.add(entryModel)
- }
- ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
- }
- })
- }
-}
\ No newline at end of file
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 b8bd623..ae9df20 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
@@ -32,7 +32,6 @@
class MainActivity : BaseActivity() {
- private val kTag = "MainActivity"
private val context: Context = this@MainActivity
private var clickTime: Long = 0
private lateinit var waterViewModel: WaterStatisticsViewModel
@@ -129,7 +128,7 @@
val endDate = time.timestampToDate()
//一周折线图数据
waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate)
- waterViewModel.areaDataModel.observe(this, {
+ waterViewModel.dayDataModel.observe(this, {
if (it.code == 200) {
val dataModel = it.data!!
dataModel.forEach { dateModel ->
@@ -160,7 +159,7 @@
})
expandView.setOnClickListener {
- navigatePageTo(ExpandedActivity::class.java)
+ navigatePageTo(WaterExpandedActivity::class.java)
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
index 1dea700..74fc2c4 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
@@ -21,7 +21,6 @@
override fun initLayoutView(): Int = R.layout.activity_map
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "地图展示"
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
index bb66c3f..954cf2d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.view
-import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.qd.smartwell.R
import com.casic.qd.smartwell.base.BaseActivity
@@ -30,7 +29,6 @@
override fun setupTopBarLayout() {
titleView.text = "告警查询"
- leftBackView.visibility = View.GONE
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
index 7f63c0a..a459183 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
@@ -16,7 +16,6 @@
override fun initLayoutView(): Int = R.layout.activity_search_record
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "记录查询"
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
index 6e0816e..988b53d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
@@ -7,7 +7,6 @@
import android.os.Handler
import android.os.Looper
import android.os.Message
-import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.casic.qd.smartwell.R
@@ -30,6 +29,7 @@
import java.lang.ref.WeakReference
class SearchResultActivity : BaseActivity() {
+
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var searchAlarmViewModel: SearchAlarmViewModel
private lateinit var cancelAlarmViewModel: CancelAlarmViewModel
@@ -44,7 +44,6 @@
override fun setupTopBarLayout() {
titleView.text = "查询结果"
- leftBackView.visibility = View.GONE
}
override fun initData() {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
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
deleted file mode 100644
index 4e3e0aa..0000000
--- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.casic.qd.smartwell.view
-
-import android.content.Context
-import android.view.View
-import android.widget.AdapterView
-import androidx.lifecycle.ViewModelProvider
-import com.casic.qd.smartwell.R
-import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.*
-import com.casic.qd.smartwell.model.LineChartEntryModel
-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
-import java.util.*
-import kotlin.collections.ArrayList
-
-
-class ExpandedActivity : BaseActivity() {
-
- private val kTag = "ExpandedActivity"
- private val context: Context = this@ExpandedActivity
- private lateinit var waterViewModel: WaterStatisticsViewModel
-
- override fun initLayoutView(): Int = R.layout.activity_expanded
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
- }
-
- override fun initEvent() {
- //默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?,
- position: Int, id: Long
- ) {
- val time = System.currentTimeMillis()
- val calendar = Calendar.getInstance()
- val year: Int = calendar.get(Calendar.YEAR)
- when (position) {
- 0 -> {
- //本年度
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, "$year-01-01", time.timestampToDate()
- )
- }
- 1 -> {
- //本季度
- 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日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID,
- time.timestampToLastMonthDate(), time.timestampToDate()
- )
- }
- 3 -> {
- //近7日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
- )
- }
- 4 -> {
- //今日
- 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()
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- waterViewModel.areaDataModel.observe(this, {
- if (it.code == 200) {
- val xAxisDate: MutableList = ArrayList()
- val entryModels: MutableList = ArrayList()
-
- val dataModel = it.data!!
- dataModel.forEach { dateModel ->
- val split = dateModel.date.toString().split("-")
- xAxisDate.add("${split[1]}/${split[2]}")
- }
- //确定有几条折线
- val lines = dataModel[0].data?.size!!
- for (i in 0 until lines) {
- //每个entries都是一条折线
- val entries: ArrayList = ArrayList()
- val entryModel = LineChartEntryModel()
- dataModel.forEachIndexed { j, dataBean ->
- entryModel.lineColor = Constant.COLORS[i].convertColor()
-
- val areaData = dataBean.data!![i]
- entries.add(
- Entry(
- j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
- )
- )
- }
- entryModel.entryList = entries
- entryModels.add(entryModel)
- }
- ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
- }
- })
- }
-}
\ No newline at end of file
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 b8bd623..ae9df20 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
@@ -32,7 +32,6 @@
class MainActivity : BaseActivity() {
- private val kTag = "MainActivity"
private val context: Context = this@MainActivity
private var clickTime: Long = 0
private lateinit var waterViewModel: WaterStatisticsViewModel
@@ -129,7 +128,7 @@
val endDate = time.timestampToDate()
//一周折线图数据
waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate)
- waterViewModel.areaDataModel.observe(this, {
+ waterViewModel.dayDataModel.observe(this, {
if (it.code == 200) {
val dataModel = it.data!!
dataModel.forEach { dateModel ->
@@ -160,7 +159,7 @@
})
expandView.setOnClickListener {
- navigatePageTo(ExpandedActivity::class.java)
+ navigatePageTo(WaterExpandedActivity::class.java)
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
index 1dea700..74fc2c4 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
@@ -21,7 +21,6 @@
override fun initLayoutView(): Int = R.layout.activity_map
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "地图展示"
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
index bb66c3f..954cf2d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.view
-import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.qd.smartwell.R
import com.casic.qd.smartwell.base.BaseActivity
@@ -30,7 +29,6 @@
override fun setupTopBarLayout() {
titleView.text = "告警查询"
- leftBackView.visibility = View.GONE
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
index 7f63c0a..a459183 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
@@ -16,7 +16,6 @@
override fun initLayoutView(): Int = R.layout.activity_search_record
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "记录查询"
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
index 6e0816e..988b53d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
@@ -7,7 +7,6 @@
import android.os.Handler
import android.os.Looper
import android.os.Message
-import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.casic.qd.smartwell.R
@@ -30,6 +29,7 @@
import java.lang.ref.WeakReference
class SearchResultActivity : BaseActivity() {
+
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var searchAlarmViewModel: SearchAlarmViewModel
private lateinit var cancelAlarmViewModel: CancelAlarmViewModel
@@ -44,7 +44,6 @@
override fun setupTopBarLayout() {
titleView.text = "查询结果"
- leftBackView.visibility = View.GONE
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt
index f6bdfa3..9258311 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt
@@ -1,10 +1,16 @@
package com.casic.qd.smartwell.view
+import android.content.Context
+import android.view.View
+import android.widget.AdapterView
+import androidx.lifecycle.ViewModelProvider
import com.casic.qd.smartwell.R
import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.init
+import com.casic.qd.smartwell.extensions.*
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.BarEntry
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.PieEntry
@@ -15,35 +21,131 @@
/**
* @author a203
* @description 汇总统计界面
- * @package com.casic.qd.smartwell.view
* @date 2022/2/17 14:34
* @email 290677893@qq.com
*/
class StatisticsActivity : BaseActivity() {
- private val valveEntries: ArrayList = ArrayList()
- private val meterEntries: ArrayList = ArrayList()
- private val pipelineEntries: ArrayList = ArrayList()
- private val deviceEntries: ArrayList = ArrayList()
- private val pieEntries: ArrayList = ArrayList()
- private val lastMonthEntries: ArrayList = ArrayList()
- private val currentMonthEntries: ArrayList = ArrayList()
+ private val context: Context = this@StatisticsActivity
+ private lateinit var waterViewModel: WaterStatisticsViewModel
+
+ private val valveEntries: MutableList = ArrayList()
+ private val meterEntries: MutableList = ArrayList()
+ private val pipelineEntries: MutableList = ArrayList()
+ private val deviceEntries: MutableList = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_statistics
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "汇总统计"
}
override fun initData() {
- //初始化饼图
- ChartViewHelper.initPieChart(totalPieChart)
- //TODO 这是模拟数据
- for (i in 0..4) {
- pieEntries.add(PieEntry(Random().nextInt(100).toFloat(), "片区$i"))
+ waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
+ }
+
+ override fun initEvent() {
+ //默认选择近7天的数据
+ periodSpinner.setSelection(3)
+ periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+ override fun onItemSelected(
+ parent: AdapterView<*>?, view: View?,
+ position: Int, id: Long
+ ) {
+ val time = System.currentTimeMillis()
+ val calendar = Calendar.getInstance()
+ val year: Int = calendar.get(Calendar.YEAR)
+ when (position) {
+ 0 -> {
+ //本年度
+ waterViewModel.waterCountBySecondArea(
+ Constant.AREA_ID, "$year-01-01", time.timestampToDate()
+ )
+ }
+ 1 -> {
+ //本季度
+ val startDate = when (time.getQuarterOfYear()) {
+ 1 -> "$year-01-01"
+ 2 -> "$year-04-01"
+ 3 -> "$year-07-01"
+ 4 -> "$year-10-01"
+ else -> ""
+ }
+ waterViewModel.waterCountBySecondArea(
+ Constant.AREA_ID, startDate, time.timestampToDate()
+ )
+ }
+ 2 -> {
+ //近30日
+ waterViewModel.waterCountBySecondArea(
+ Constant.AREA_ID,
+ time.timestampToLastMonthDate(), time.timestampToDate()
+ )
+ }
+ 3 -> {
+ //近7日
+ waterViewModel.waterCountBySecondArea(
+ Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
+ )
+ }
+ 4 -> {
+ //今日
+ waterViewModel.waterCountBySecondArea(
+ 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.waterCountBySecondArea(
+ Constant.AREA_ID, startDate, endDate
+ )
+ }
+
+ override fun onCancelClick() {
+ //选择取消就默认加载近7天的数据
+ periodSpinner.setSelection(3)
+ }
+ }).build().show()
+ }
+ }
+ }
+
+ override fun onNothingSelected(parent: AdapterView<*>?) {
+
+ }
}
- ChartViewHelper.setPieChartData(totalPieChart, pieEntries)
+
+ waterViewModel.areaDataModel.observe(this, {
+ if (it.code == 200) {
+ val xAxisLabel: MutableList = ArrayList()
+ //柱状图
+ val barEntries: MutableList = ArrayList()
+ //饼图
+ val pieEntries: MutableList = ArrayList()
+ it.data?.forEachIndexed { index, dataBean ->
+ xAxisLabel.add(dataBean.areaName.toString())
+ val dataValue = if (dataBean.count.toString().isBlank()) {
+ 0f
+ } else {
+ dataBean.count!!.toFloat()
+ }
+ //柱状图
+ barEntries.add(BarEntry(index.toFloat(), dataValue))
+ //饼图
+ pieEntries.add(PieEntry(dataValue, dataBean.areaName))
+ }
+ ChartViewHelper.setBarChartData(waterBarChart, xAxisLabel, barEntries)
+ ChartViewHelper.setPieChartData(waterPieChart, pieEntries)
+ }
+ })
//初始化折线图
totalLineChart.init()
@@ -81,18 +183,5 @@
pipelineEntries,
deviceEntries
)
-
- //初始化柱状图
- ChartViewHelper.initBarChart(totalBarChart)
- //TODO 这是模拟数据
- for (i in 0..5) {
- lastMonthEntries.add(BarEntry((i - 0.15).toFloat(), Random().nextInt(150).toFloat()))
- currentMonthEntries.add(BarEntry((i + 0.15).toFloat(), Random().nextInt(150).toFloat()))
- }
- ChartViewHelper.setBarChartData(totalBarChart, lastMonthEntries, currentMonthEntries)
- }
-
- override fun initEvent() {
-
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList,
@@ -85,6 +82,65 @@
chart.invalidate()
}
+ /**
+ * 柱状图
+ * */
+ fun setBarChartData(chart: BarChart, xAxisLabel: MutableList, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init(xAxisLabel)
+ val barDataSets: MutableList = ArrayList()
+ //绑定数据
+ val dataSet = BarDataSet(entries, "")
+ dataSet.color = R.color.color_1.convertColor()
+ dataSet.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble())
+ }
+ }
+ barDataSets.add(dataSet)
+ val barData = BarData(barDataSets)
+ barData.barWidth = 0.5f
+ chart.data = barData
+ chart.invalidate()
+ }
+
+ /**
+ * 饼图
+ * */
+ fun setPieChartData(chart: PieChart, entries: List) {
+ //每次加载数据都初始化饼图
+ chart.init()
+ //绑定数据
+ val dataSet = PieDataSet(entries, "")
+ dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙
+ dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
+ //设置饼图块颜色
+ val colors: MutableList = ArrayList()
+ for (i in entries.indices) {
+ colors.add(Constant.COLORS[i].convertColor())
+ }
+ dataSet.colors = colors
+ //设置标签显示在饼图块外面
+ dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
+ dataSet.valueLineColor = R.color.mainThemeColor.convertColor()
+ dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
+ dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度
+ val data = PieData(dataSet)
+ data.setValueFormatter(object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return decimalFormat.format(value.toDouble()) + "t"
+ }
+ })
+ data.setValueTextSize(12f)
+ data.setValueTextColor(R.color.mainThemeColor.convertColor()) //数据值颜色
+ chart.data = data
+ chart.highlightValues(null)
+ chart.invalidate()
+ }
+
+ /*******************************************************************************************/
+
fun setLineChartData(
chart: LineChart,
valveEntries: List?,
@@ -116,21 +172,21 @@
val pipelineDataSet = LineDataSet(pipelineEntries, "管线")
pipelineDataSet.color =
- R.color.pieColor5.convertColor() //线条颜色
- pipelineDataSet.setCircleColor(R.color.pieColor5.convertColor()) //圆点颜色
+ R.color.color_5.convertColor() //线条颜色
+ pipelineDataSet.setCircleColor(R.color.color_5.convertColor()) //圆点颜色
pipelineDataSet.setDrawFilled(true)
pipelineDataSet.fillColor =
- R.color.pieColor5.convertColor()
+ R.color.color_5.convertColor()
pipelineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(pipelineDataSet)
val deviceDataSet = LineDataSet(deviceEntries, "噪声仪")
deviceDataSet.color =
- R.color.barChartColor.convertColor() //线条颜色
- deviceDataSet.setCircleColor(R.color.barChartColor.convertColor()) //圆点颜色
+ R.color.color_7.convertColor() //线条颜色
+ deviceDataSet.setCircleColor(R.color.color_7.convertColor()) //圆点颜色
deviceDataSet.setDrawFilled(true)
deviceDataSet.fillColor =
- R.color.barChartColor.convertColor()
+ R.color.color_7.convertColor()
deviceDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
lineDataSets.add(deviceDataSet)
@@ -139,173 +195,4 @@
chart.data = lineData
chart.invalidate()
}
-
- fun initBarChart(chart: BarChart) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //图例
- val legend = chart.legend
- legend.orientation = Legend.LegendOrientation.HORIZONTAL
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.BOTTOM
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.CENTER
-
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = Constant.BAR_LABEL_NAME.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return Constant.BAR_LABEL_NAME[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: BarChart, last: List, current: List) {
- val barDataSets: MutableList = ArrayList()
- //绑定数据
- val lastDataSet = BarDataSet(last, "上月")
- lastDataSet.color = R.color.barChartColor.convertColor()
- lastDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(lastDataSet)
-
- val currentDataSet = BarDataSet(current, "本月")
- currentDataSet.color = R.color.onLineColor.convertColor()
- currentDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- barDataSets.add(currentDataSet)
-
- val barData = BarData(barDataSets)
- barData.barWidth = 0.3f
-
- chart.data = barData
- chart.invalidate()
- }
-
- fun initBarChart(chart: HorizontalBarChart, labelName: Array) {
- chart.setDrawGridBackground(false)
- chart.setDrawBorders(false)
- chart.setScaleEnabled(false)
- //去掉描述
- chart.description.isEnabled = false
- //去掉图例
- chart.legend.isEnabled = false
- val xAxis: XAxis = chart.xAxis
- xAxis.textColor = R.color.mainTextColor.convertColor()
- xAxis.textSize = 12f
- xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
- xAxis.labelCount = labelName.size // 设置x轴上的标签个数
- xAxis.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return labelName[value.toInt()]
- }
- }
- xAxis.setDrawAxisLine(true) //是否绘制轴线
- xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
- xAxis.position = XAxis.XAxisPosition.BOTTOM
- chart.extraBottomOffset = 5f //解决X轴显示不完全问题
- //设置样式
- val rightAxis: YAxis = chart.axisRight
- //设置图表右边的y轴禁用
- rightAxis.isEnabled = false
- val leftAxis: YAxis = chart.axisLeft
- leftAxis.axisMinimum = 0f
- }
-
- fun setBarChartData(chart: HorizontalBarChart, entries: List?) {
- //绑定数据
- val barDataSet = BarDataSet(entries, "")
- barDataSet.color = R.color.barChartColor.convertColor()
- barDataSet.valueFormatter = object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble())
- }
- }
- val barData = BarData(barDataSet)
- barData.barWidth = 0.5f
- chart.data = barData
- chart.invalidate()
- }
-
- fun initPieChart(chart: PieChart) {
- chart.setUsePercentValues(false) //百分比数字显示
- chart.description.isEnabled = false
- chart.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
- chart.setBackgroundColor(Color.WHITE) //设置图表背景色
- chart.rotationAngle = 0f
- chart.isRotationEnabled = true
- chart.isHighlightPerTapEnabled = true
- chart.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
- chart.setDrawEntryLabels(false) //不显示分类标签
- chart.isDrawHoleEnabled = true //圆环显示
- chart.setDrawCenterText(true) //圆环中心颜色
- chart.centerText = "分区水表统计"
- chart.setEntryLabelColor(Color.BLUE) //图表文本字体颜色
- chart.setEntryLabelTextSize(12f)
- //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
- chart.setExtraOffsets(13f, 13f, 13f, 13f)
- //设置图例位置
- val legend = chart.legend
- legend.verticalAlignment =
- Legend.LegendVerticalAlignment.CENTER
- legend.horizontalAlignment =
- Legend.LegendHorizontalAlignment.LEFT
- legend.orientation = Legend.LegendOrientation.VERTICAL
- legend.formSize = 12f
- legend.formToTextSpace = 8f
- legend.textSize = 12f
- }
-
- fun setPieChartData(chart: PieChart, entries: List) {
- val dataSet = PieDataSet(entries, "")
- dataSet.sliceSpace = 3f //设置饼状块之间的间隙
- dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离
- //设置饼图块颜色
- val colors: MutableList = ArrayList()
- for (i in entries.indices) {
- colors.add(
- Constant.COLORS[i].convertColor()
- )
- }
- dataSet.colors = colors
- //设置标签显示在饼图块外面
- dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE
- dataSet.valueLineColor = Color.BLUE
- dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度
- dataSet.valueLinePart2Length = 0.55f //标签指示线后半截长度
- val data = PieData(dataSet)
- data.setValueFormatter(object : ValueFormatter() {
- override fun getFormattedValue(value: Float): String {
- return decimalFormat.format(value.toDouble()) + "m³"
- }
- })
- data.setValueTextSize(12f)
- data.setValueTextColor(Color.BLUE) //数据值颜色
- chart.data = data
- chart.highlightValues(null)
- chart.invalidate()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
index ecb931e..51b77eb 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt
@@ -13,7 +13,6 @@
const val PERMISSIONS_CODE = 999
const val PAGE_LIMIT = 20
const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L
- const val ONE_WEEK = 7
val HOME_ICONS = arrayOf(
R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics,
@@ -22,17 +21,12 @@
//预置颜色
val COLORS = arrayOf(
- R.color.pieColor3, R.color.onLineColor, R.color.pieColor1,
- R.color.barChartColor, R.color.punishColor, R.color.colorAccent,
- R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5,
- R.color.weChatGreen
+ R.color.color_1, R.color.color_2, R.color.color_3,
+ R.color.color_4, R.color.color_5, R.color.color_6,
+ R.color.color_7, R.color.color_8, R.color.color_9
)
val YEARS = arrayOf(2018, 2019, 2020, 2021, 2022)
- val BAR_LABEL_NAME = arrayOf(
- "10mm", "20mm", "30mm",
- "40mm", "50mm", "60mm"
- )
const val INTENT_PARAM = "intentParam"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
index 016b204..ec597e6 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt
@@ -120,7 +120,7 @@
): String
/**
- * 获取7日内用水量
+ * 获取近日用水量
*/
@GET("/waterStatistic/countByDay")
suspend fun waterCountByDay(
@@ -129,4 +129,15 @@
@Query("startTime") startTime: String,
@Query("endTime") endTime: String
): String
+
+ /**
+ * 获取分区用水占比
+ */
+ @GET("/waterStatistic/countBySecondArea")
+ suspend fun waterCountBySecondArea(
+ @Header("token") token: String,
+ @Query("areaId") areaId: String,
+ @Query("startTime") startTime: String,
+ @Query("endTime") endTime: String
+ ): String
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
index 43e0bf4..6425a24 100644
--- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt
@@ -127,9 +127,16 @@
}
/**
- * 获取近7日内用水量
+ * 获取近日用水量
*/
suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String {
return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime)
}
+
+ /**
+ * 获取分区用水占比
+ */
+ suspend fun waterCountBySecondArea(areaId: String, startTime: String, endTime: String): String {
+ return api.waterCountBySecondArea(AuthenticationHelper.token!!, areaId, startTime, endTime)
+ }
}
\ No newline at end of file
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
deleted file mode 100644
index 4e3e0aa..0000000
--- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.casic.qd.smartwell.view
-
-import android.content.Context
-import android.view.View
-import android.widget.AdapterView
-import androidx.lifecycle.ViewModelProvider
-import com.casic.qd.smartwell.R
-import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.*
-import com.casic.qd.smartwell.model.LineChartEntryModel
-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
-import java.util.*
-import kotlin.collections.ArrayList
-
-
-class ExpandedActivity : BaseActivity() {
-
- private val kTag = "ExpandedActivity"
- private val context: Context = this@ExpandedActivity
- private lateinit var waterViewModel: WaterStatisticsViewModel
-
- override fun initLayoutView(): Int = R.layout.activity_expanded
-
- override fun setupTopBarLayout() {
-
- }
-
- override fun initData() {
- waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
- }
-
- override fun initEvent() {
- //默认选择近7天的数据
- periodSpinner.setSelection(3)
- periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?, view: View?,
- position: Int, id: Long
- ) {
- val time = System.currentTimeMillis()
- val calendar = Calendar.getInstance()
- val year: Int = calendar.get(Calendar.YEAR)
- when (position) {
- 0 -> {
- //本年度
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, "$year-01-01", time.timestampToDate()
- )
- }
- 1 -> {
- //本季度
- 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日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID,
- time.timestampToLastMonthDate(), time.timestampToDate()
- )
- }
- 3 -> {
- //近7日
- waterViewModel.waterCountByDay(
- Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
- )
- }
- 4 -> {
- //今日
- 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()
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
-
- }
- }
-
- waterViewModel.areaDataModel.observe(this, {
- if (it.code == 200) {
- val xAxisDate: MutableList = ArrayList()
- val entryModels: MutableList = ArrayList()
-
- val dataModel = it.data!!
- dataModel.forEach { dateModel ->
- val split = dateModel.date.toString().split("-")
- xAxisDate.add("${split[1]}/${split[2]}")
- }
- //确定有几条折线
- val lines = dataModel[0].data?.size!!
- for (i in 0 until lines) {
- //每个entries都是一条折线
- val entries: ArrayList = ArrayList()
- val entryModel = LineChartEntryModel()
- dataModel.forEachIndexed { j, dataBean ->
- entryModel.lineColor = Constant.COLORS[i].convertColor()
-
- val areaData = dataBean.data!![i]
- entries.add(
- Entry(
- j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
- )
- )
- }
- entryModel.entryList = entries
- entryModels.add(entryModel)
- }
- ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
- }
- })
- }
-}
\ No newline at end of file
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 b8bd623..ae9df20 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
@@ -32,7 +32,6 @@
class MainActivity : BaseActivity() {
- private val kTag = "MainActivity"
private val context: Context = this@MainActivity
private var clickTime: Long = 0
private lateinit var waterViewModel: WaterStatisticsViewModel
@@ -129,7 +128,7 @@
val endDate = time.timestampToDate()
//一周折线图数据
waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate)
- waterViewModel.areaDataModel.observe(this, {
+ waterViewModel.dayDataModel.observe(this, {
if (it.code == 200) {
val dataModel = it.data!!
dataModel.forEach { dateModel ->
@@ -160,7 +159,7 @@
})
expandView.setOnClickListener {
- navigatePageTo(ExpandedActivity::class.java)
+ navigatePageTo(WaterExpandedActivity::class.java)
}
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
index 1dea700..74fc2c4 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/MapActivity.kt
@@ -21,7 +21,6 @@
override fun initLayoutView(): Int = R.layout.activity_map
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "地图展示"
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
index bb66c3f..954cf2d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt
@@ -1,6 +1,5 @@
package com.casic.qd.smartwell.view
-import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.qd.smartwell.R
import com.casic.qd.smartwell.base.BaseActivity
@@ -30,7 +29,6 @@
override fun setupTopBarLayout() {
titleView.text = "告警查询"
- leftBackView.visibility = View.GONE
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
index 7f63c0a..a459183 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt
@@ -16,7 +16,6 @@
override fun initLayoutView(): Int = R.layout.activity_search_record
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "记录查询"
}
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
index 6e0816e..988b53d 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchResultActivity.kt
@@ -7,7 +7,6 @@
import android.os.Handler
import android.os.Looper
import android.os.Message
-import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.casic.qd.smartwell.R
@@ -30,6 +29,7 @@
import java.lang.ref.WeakReference
class SearchResultActivity : BaseActivity() {
+
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var searchAlarmViewModel: SearchAlarmViewModel
private lateinit var cancelAlarmViewModel: CancelAlarmViewModel
@@ -44,7 +44,6 @@
override fun setupTopBarLayout() {
titleView.text = "查询结果"
- leftBackView.visibility = View.GONE
}
override fun initData() {
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt
index f6bdfa3..9258311 100644
--- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt
@@ -1,10 +1,16 @@
package com.casic.qd.smartwell.view
+import android.content.Context
+import android.view.View
+import android.widget.AdapterView
+import androidx.lifecycle.ViewModelProvider
import com.casic.qd.smartwell.R
import com.casic.qd.smartwell.base.BaseActivity
-import com.casic.qd.smartwell.extensions.init
+import com.casic.qd.smartwell.extensions.*
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.BarEntry
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.PieEntry
@@ -15,35 +21,131 @@
/**
* @author a203
* @description 汇总统计界面
- * @package com.casic.qd.smartwell.view
* @date 2022/2/17 14:34
* @email 290677893@qq.com
*/
class StatisticsActivity : BaseActivity() {
- private val valveEntries: ArrayList = ArrayList()
- private val meterEntries: ArrayList = ArrayList()
- private val pipelineEntries: ArrayList = ArrayList()
- private val deviceEntries: ArrayList = ArrayList()
- private val pieEntries: ArrayList = ArrayList()
- private val lastMonthEntries: ArrayList = ArrayList()
- private val currentMonthEntries: ArrayList = ArrayList()
+ private val context: Context = this@StatisticsActivity
+ private lateinit var waterViewModel: WaterStatisticsViewModel
+
+ private val valveEntries: MutableList = ArrayList()
+ private val meterEntries: MutableList = ArrayList()
+ private val pipelineEntries: MutableList = ArrayList()
+ private val deviceEntries: MutableList = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_statistics
override fun setupTopBarLayout() {
- leftBackView.setOnClickListener { finish() }
titleView.text = "汇总统计"
}
override fun initData() {
- //初始化饼图
- ChartViewHelper.initPieChart(totalPieChart)
- //TODO 这是模拟数据
- for (i in 0..4) {
- pieEntries.add(PieEntry(Random().nextInt(100).toFloat(), "片区$i"))
+ waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
+ }
+
+ override fun initEvent() {
+ //默认选择近7天的数据
+ periodSpinner.setSelection(3)
+ periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+ override fun onItemSelected(
+ parent: AdapterView<*>?, view: View?,
+ position: Int, id: Long
+ ) {
+ val time = System.currentTimeMillis()
+ val calendar = Calendar.getInstance()
+ val year: Int = calendar.get(Calendar.YEAR)
+ when (position) {
+ 0 -> {
+ //本年度
+ waterViewModel.waterCountBySecondArea(
+ Constant.AREA_ID, "$year-01-01", time.timestampToDate()
+ )
+ }
+ 1 -> {
+ //本季度
+ val startDate = when (time.getQuarterOfYear()) {
+ 1 -> "$year-01-01"
+ 2 -> "$year-04-01"
+ 3 -> "$year-07-01"
+ 4 -> "$year-10-01"
+ else -> ""
+ }
+ waterViewModel.waterCountBySecondArea(
+ Constant.AREA_ID, startDate, time.timestampToDate()
+ )
+ }
+ 2 -> {
+ //近30日
+ waterViewModel.waterCountBySecondArea(
+ Constant.AREA_ID,
+ time.timestampToLastMonthDate(), time.timestampToDate()
+ )
+ }
+ 3 -> {
+ //近7日
+ waterViewModel.waterCountBySecondArea(
+ Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
+ )
+ }
+ 4 -> {
+ //今日
+ waterViewModel.waterCountBySecondArea(
+ 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.waterCountBySecondArea(
+ Constant.AREA_ID, startDate, endDate
+ )
+ }
+
+ override fun onCancelClick() {
+ //选择取消就默认加载近7天的数据
+ periodSpinner.setSelection(3)
+ }
+ }).build().show()
+ }
+ }
+ }
+
+ override fun onNothingSelected(parent: AdapterView<*>?) {
+
+ }
}
- ChartViewHelper.setPieChartData(totalPieChart, pieEntries)
+
+ waterViewModel.areaDataModel.observe(this, {
+ if (it.code == 200) {
+ val xAxisLabel: MutableList = ArrayList()
+ //柱状图
+ val barEntries: MutableList = ArrayList()
+ //饼图
+ val pieEntries: MutableList = ArrayList()
+ it.data?.forEachIndexed { index, dataBean ->
+ xAxisLabel.add(dataBean.areaName.toString())
+ val dataValue = if (dataBean.count.toString().isBlank()) {
+ 0f
+ } else {
+ dataBean.count!!.toFloat()
+ }
+ //柱状图
+ barEntries.add(BarEntry(index.toFloat(), dataValue))
+ //饼图
+ pieEntries.add(PieEntry(dataValue, dataBean.areaName))
+ }
+ ChartViewHelper.setBarChartData(waterBarChart, xAxisLabel, barEntries)
+ ChartViewHelper.setPieChartData(waterPieChart, pieEntries)
+ }
+ })
//初始化折线图
totalLineChart.init()
@@ -81,18 +183,5 @@
pipelineEntries,
deviceEntries
)
-
- //初始化柱状图
- ChartViewHelper.initBarChart(totalBarChart)
- //TODO 这是模拟数据
- for (i in 0..5) {
- lastMonthEntries.add(BarEntry((i - 0.15).toFloat(), Random().nextInt(150).toFloat()))
- currentMonthEntries.add(BarEntry((i + 0.15).toFloat(), Random().nextInt(150).toFloat()))
- }
- ChartViewHelper.setBarChartData(totalBarChart, lastMonthEntries, currentMonthEntries)
- }
-
- override fun initEvent() {
-
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt
new file mode 100644
index 0000000..20f0d3c
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt
@@ -0,0 +1,148 @@
+package com.casic.qd.smartwell.view
+
+import android.content.Context
+import android.view.View
+import android.widget.AdapterView
+import androidx.lifecycle.ViewModelProvider
+import com.casic.qd.smartwell.R
+import com.casic.qd.smartwell.base.BaseActivity
+import com.casic.qd.smartwell.extensions.*
+import com.casic.qd.smartwell.model.LineChartEntryModel
+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_water_expanded.*
+import java.util.*
+import kotlin.collections.ArrayList
+
+
+class WaterExpandedActivity : BaseActivity() {
+
+ private val context: Context = this@WaterExpandedActivity
+ private lateinit var waterViewModel: WaterStatisticsViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_water_expanded
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+ waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java)
+ }
+
+ override fun initEvent() {
+ //默认选择近7天的数据
+ periodSpinner.setSelection(3)
+ periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+ override fun onItemSelected(
+ parent: AdapterView<*>?, view: View?,
+ position: Int, id: Long
+ ) {
+ val time = System.currentTimeMillis()
+ val calendar = Calendar.getInstance()
+ val year: Int = calendar.get(Calendar.YEAR)
+ when (position) {
+ 0 -> {
+ //本年度
+ waterViewModel.waterCountByDay(
+ Constant.AREA_ID, "$year-01-01", time.timestampToDate()
+ )
+ }
+ 1 -> {
+ //本季度
+ 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日
+ waterViewModel.waterCountByDay(
+ Constant.AREA_ID,
+ time.timestampToLastMonthDate(), time.timestampToDate()
+ )
+ }
+ 3 -> {
+ //近7日
+ waterViewModel.waterCountByDay(
+ Constant.AREA_ID, time.timestampToLastWeekDate(), time.timestampToDate()
+ )
+ }
+ 4 -> {
+ //今日
+ 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()
+ }
+ }
+ }
+
+ override fun onNothingSelected(parent: AdapterView<*>?) {
+
+ }
+ }
+
+ waterViewModel.dayDataModel.observe(this, {
+ if (it.code == 200) {
+ val xAxisDate: MutableList = ArrayList()
+ val entryModels: MutableList = ArrayList()
+
+ val dataModel = it.data!!
+ dataModel.forEach { dateModel ->
+ val split = dateModel.date.toString().split("-")
+ xAxisDate.add("${split[1]}/${split[2]}")
+ }
+ //确定有几条折线
+ val lines = dataModel[0].data?.size!!
+ for (i in 0 until lines) {
+ //每个entries都是一条折线
+ val entries: ArrayList = ArrayList()
+ val entryModel = LineChartEntryModel()
+ dataModel.forEachIndexed { j, dataBean ->
+ entryModel.lineColor = Constant.COLORS[i].convertColor()
+
+ val areaData = dataBean.data!![i]
+ entries.add(
+ Entry(
+ j.toFloat(), areaData.count!!.toFloat(), areaData.areaName
+ )
+ )
+ }
+ entryModel.entryList = entries
+ entryModels.add(entryModel)
+ }
+ ChartViewHelper.setLineChartData(waterLineChart, xAxisDate, entryModels)
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d215e77..0c249a9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
new file mode 100644
index 0000000..cb85a39
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/BarChart.kt
@@ -0,0 +1,39 @@
+package com.casic.qd.smartwell.extensions
+
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.BarChart
+import com.github.mikephil.charting.components.XAxis
+import com.github.mikephil.charting.components.YAxis
+import com.github.mikephil.charting.formatter.ValueFormatter
+
+fun BarChart.init(barLabels: MutableList) {
+ this.animateY(1200, Easing.EaseInOutQuad)
+ this.setDrawGridBackground(false)
+ this.setDrawBorders(false)
+ this.setScaleEnabled(false)
+ //去掉描述
+ this.description.isEnabled = false
+ val xAxis: XAxis = this.xAxis
+ xAxis.textColor = R.color.mainTextColor.convertColor()
+ xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值
+ xAxis.labelCount = barLabels.size // 设置x轴上的标签个数
+ xAxis.valueFormatter = object : ValueFormatter() {
+ override fun getFormattedValue(value: Float): String {
+ return barLabels[value.toInt()]
+ }
+ }
+ xAxis.setDrawAxisLine(true) //是否绘制轴线
+ xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线
+ xAxis.position = XAxis.XAxisPosition.BOTTOM
+ xAxis.labelRotationAngle = -45f //X轴标签斜45度
+ this.extraBottomOffset = 5f //解决X轴显示不完全问题
+ //设置样式
+ val rightAxis: YAxis = this.axisRight
+ //设置图表右边的y轴禁用
+ rightAxis.isEnabled = false
+ val leftAxis: YAxis = this.axisLeft
+ leftAxis.axisMinimum = 0f
+ //不显示图例
+ this.legend.isEnabled = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
index 5025b55..13e8a73 100644
--- a/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/LineChart.kt
@@ -36,4 +36,6 @@
legend.orientation = Legend.LegendOrientation.HORIZONTAL
legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
new file mode 100644
index 0000000..a88e096
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/extensions/PieChart.kt
@@ -0,0 +1,33 @@
+package com.casic.qd.smartwell.extensions
+
+import android.graphics.Color
+import com.casic.qd.smartwell.R
+import com.github.mikephil.charting.animation.Easing
+import com.github.mikephil.charting.charts.PieChart
+import com.github.mikephil.charting.components.Legend
+
+fun PieChart.init() {
+ this.setUsePercentValues(false) //百分比数字显示
+ this.description.isEnabled = false
+ this.dragDecelerationFrictionCoef = 0.95f //图表转动阻力摩擦系数[0,1]
+ this.setBackgroundColor(Color.WHITE) //设置图表背景色
+ this.rotationAngle = 0f
+ this.isRotationEnabled = false
+ this.isHighlightPerTapEnabled = true
+ this.animateY(1200, Easing.EaseInOutQuad) // 设置图表展示动画效果
+ this.setDrawEntryLabels(false) //不显示分类标签
+ this.isDrawHoleEnabled = false //圆环显示
+ this.setDrawCenterText(false) //圆环中心文字
+ this.centerText = "分区用水占比图"
+ this.setEntryLabelColor(R.color.mainThemeColor.convertColor()) //图表文本字体颜色
+ this.setEntryLabelTextSize(12f)
+ //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小
+ this.setExtraOffsets(7.5f, 2.5f, 7.5f, 2.5f)
+ //设置图例位置
+ val legend = this.legend
+ legend.verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
+ legend.horizontalAlignment = Legend.LegendHorizontalAlignment.CENTER
+ legend.orientation = Legend.LegendOrientation.HORIZONTAL
+ //图例是否自动换行
+ legend.isWordWrapEnabled = true
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
new file mode 100644
index 0000000..97fef28
--- /dev/null
+++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSecondAreaModel.kt
@@ -0,0 +1,14 @@
+package com.casic.qd.smartwell.model
+
+class WaterSecondAreaModel {
+ var code = 0
+ var data: List? = null
+ var message: String? = null
+ var isSuccess = false
+
+ class DataBean {
+ var areaId: String? = null
+ var areaName: String? = null
+ var count: String? = null
+ }
+}
\ 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 366a106..f6a0cc0 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
@@ -1,20 +1,14 @@
package com.casic.qd.smartwell.utils
-import android.graphics.Color
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
import com.github.mikephil.charting.charts.BarChart
-import com.github.mikephil.charting.charts.HorizontalBarChart
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.charts.PieChart
-import com.github.mikephil.charting.components.Legend
-import com.github.mikephil.charting.components.XAxis
-import com.github.mikephil.charting.components.YAxis
import com.github.mikephil.charting.data.*
import com.github.mikephil.charting.formatter.ValueFormatter
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet
@@ -30,8 +24,11 @@
*/
object ChartViewHelper {
private const val kTag = "ChartViewHelper"
- private val decimalFormat = DecimalFormat("##0.00")
+ private val decimalFormat = DecimalFormat("##0.0")
+ /**
+ * 折线图
+ * */
fun setLineChartData(
chart: LineChart,
xAxisDate: MutableList