diff --git a/app/build.gradle b/app/build.gradle index 62364a6..d143cf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,4 +116,6 @@ implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 //WebView implementation 'com.just.agentweb:agentweb-androidx:4.1.4' + //仿iOS风格RadioGroup + implementation 'info.hoang8f:android-segmented:1.0.6' } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 62364a6..d143cf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,4 +116,6 @@ implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 //WebView implementation 'com.just.agentweb:agentweb-androidx:4.1.4' + //仿iOS风格RadioGroup + implementation 'info.hoang8f:android-segmented:1.0.6' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/PieChart.kt b/app/src/main/java/com/casic/br/extensions/PieChart.kt new file mode 100644 index 0000000..cfd8235 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/PieChart.kt @@ -0,0 +1,40 @@ +package com.casic.br.extensions + +import android.content.Context +import android.graphics.Color +import com.casic.br.R +import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.components.Legend +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.sp2px + +fun PieChart.init(context: Context) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(R.color.red) + this.getPaint(Chart.PAINT_INFO).textSize = 14f.sp2px(context).toFloat() + 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.blue.convertColor(context)) //图表文本字体颜色 + 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/build.gradle b/app/build.gradle index 62364a6..d143cf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,4 +116,6 @@ implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 //WebView implementation 'com.just.agentweb:agentweb-androidx:4.1.4' + //仿iOS风格RadioGroup + implementation 'info.hoang8f:android-segmented:1.0.6' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/PieChart.kt b/app/src/main/java/com/casic/br/extensions/PieChart.kt new file mode 100644 index 0000000..cfd8235 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/PieChart.kt @@ -0,0 +1,40 @@ +package com.casic.br.extensions + +import android.content.Context +import android.graphics.Color +import com.casic.br.R +import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.components.Legend +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.sp2px + +fun PieChart.init(context: Context) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(R.color.red) + this.getPaint(Chart.PAINT_INFO).textSize = 14f.sp2px(context).toFloat() + 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.blue.convertColor(context)) //图表文本字体颜色 + 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/br/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt new file mode 100644 index 0000000..665d815 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt @@ -0,0 +1,219 @@ +package com.casic.br.utils + +import com.casic.br.R +import com.casic.br.extensions.init +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.data.PieData +import com.github.mikephil.charting.data.PieDataSet +import com.github.mikephil.charting.data.PieEntry +import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.kt.lite.extensions.convertColor +import java.text.DecimalFormat + + +/** + * @author a203 + * @description 各种图初始化配置类 + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +object ChartViewHelper { +// /** +// * 单条折线图 +// * */ +// fun setSingleLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModel: LineChartEntryModel +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModel.entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// //设置数据 +// val dataSet = LineDataSet(entryModel.entryList, entryModel.entryList[0].data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = entryModel.lineColor +// //圆点颜色 +// dataSet.setCircleColor(entryModel.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = entryModel.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// if (xAxisDate.size == 1) { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[0] +// } +// } +// } else { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 多条折线图 +// * */ +// fun setLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModels: List +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModels[0].entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// entryModels.forEachIndexed { index, it -> +// //设置数据 +// val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = it.lineColor +// //圆点颜色 +// dataSet.setCircleColor(it.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = it.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// } +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 竖直柱状图 +// * */ +// fun setBarChartData( +// chart: BarChart, +// xAxisLabel: MutableList, +// entries: List, +// dateType: String +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_1.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType(dateType) +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } +// +// /** +// * 横向柱状图 +// * */ +// fun setBarChartData( +// chart: HorizontalBarChart, +// xAxisLabel: MutableList, +// entries: List +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_6.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType("") +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } + + /** + * 饼图 + * */ + fun setPieChartData(chart: PieChart, entries: List) { + //每次加载数据都初始化饼图 + chart.init(chart.context) + if (entries.isEmpty()) { + return + } + //绑定数据 + val dataSet = PieDataSet(entries, "") + dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙 + dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离 + //设置饼图块颜色 + val colors: MutableList = ArrayList() + for (i in entries.indices) { + colors.add(LocaleConstant.COLORS[i].convertColor(chart.context)) + } + dataSet.colors = colors + //设置标签显示在饼图块外面 + dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.valueLineColor = + R.color.mainThemeColor.convertColor(chart.context) + dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度 + dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度 + val data = PieData(dataSet) + data.setValueFormatter(object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0.0").format(value.toDouble()) + "t" + } + }) + data.setValueTextSize(12f) + data.setValueTextColor(R.color.mainThemeColor.convertColor(chart.context)) //数据值颜色 + chart.data = data + chart.highlightValues(null) + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 62364a6..d143cf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,4 +116,6 @@ implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 //WebView implementation 'com.just.agentweb:agentweb-androidx:4.1.4' + //仿iOS风格RadioGroup + implementation 'info.hoang8f:android-segmented:1.0.6' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/PieChart.kt b/app/src/main/java/com/casic/br/extensions/PieChart.kt new file mode 100644 index 0000000..cfd8235 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/PieChart.kt @@ -0,0 +1,40 @@ +package com.casic.br.extensions + +import android.content.Context +import android.graphics.Color +import com.casic.br.R +import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.components.Legend +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.sp2px + +fun PieChart.init(context: Context) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(R.color.red) + this.getPaint(Chart.PAINT_INFO).textSize = 14f.sp2px(context).toFloat() + 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.blue.convertColor(context)) //图表文本字体颜色 + 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/br/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt new file mode 100644 index 0000000..665d815 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt @@ -0,0 +1,219 @@ +package com.casic.br.utils + +import com.casic.br.R +import com.casic.br.extensions.init +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.data.PieData +import com.github.mikephil.charting.data.PieDataSet +import com.github.mikephil.charting.data.PieEntry +import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.kt.lite.extensions.convertColor +import java.text.DecimalFormat + + +/** + * @author a203 + * @description 各种图初始化配置类 + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +object ChartViewHelper { +// /** +// * 单条折线图 +// * */ +// fun setSingleLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModel: LineChartEntryModel +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModel.entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// //设置数据 +// val dataSet = LineDataSet(entryModel.entryList, entryModel.entryList[0].data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = entryModel.lineColor +// //圆点颜色 +// dataSet.setCircleColor(entryModel.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = entryModel.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// if (xAxisDate.size == 1) { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[0] +// } +// } +// } else { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 多条折线图 +// * */ +// fun setLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModels: List +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModels[0].entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// entryModels.forEachIndexed { index, it -> +// //设置数据 +// val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = it.lineColor +// //圆点颜色 +// dataSet.setCircleColor(it.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = it.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// } +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 竖直柱状图 +// * */ +// fun setBarChartData( +// chart: BarChart, +// xAxisLabel: MutableList, +// entries: List, +// dateType: String +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_1.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType(dateType) +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } +// +// /** +// * 横向柱状图 +// * */ +// fun setBarChartData( +// chart: HorizontalBarChart, +// xAxisLabel: MutableList, +// entries: List +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_6.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType("") +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } + + /** + * 饼图 + * */ + fun setPieChartData(chart: PieChart, entries: List) { + //每次加载数据都初始化饼图 + chart.init(chart.context) + if (entries.isEmpty()) { + return + } + //绑定数据 + val dataSet = PieDataSet(entries, "") + dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙 + dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离 + //设置饼图块颜色 + val colors: MutableList = ArrayList() + for (i in entries.indices) { + colors.add(LocaleConstant.COLORS[i].convertColor(chart.context)) + } + dataSet.colors = colors + //设置标签显示在饼图块外面 + dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.valueLineColor = + R.color.mainThemeColor.convertColor(chart.context) + dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度 + dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度 + val data = PieData(dataSet) + data.setValueFormatter(object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0.0").format(value.toDouble()) + "t" + } + }) + data.setValueTextSize(12f) + data.setValueTextColor(R.color.mainThemeColor.convertColor(chart.context)) //数据值颜色 + chart.data = data + chart.highlightValues(null) + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c637fba..d042a7f 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -36,6 +36,12 @@ val DEVICE_PAGE_TITLE = arrayOf("设备控制", "状态显示", "服务设置") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + //预置颜色 + val COLORS = arrayOf( + 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 + ) /** * ============================================================================================= diff --git a/app/build.gradle b/app/build.gradle index 62364a6..d143cf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,4 +116,6 @@ implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 //WebView implementation 'com.just.agentweb:agentweb-androidx:4.1.4' + //仿iOS风格RadioGroup + implementation 'info.hoang8f:android-segmented:1.0.6' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/PieChart.kt b/app/src/main/java/com/casic/br/extensions/PieChart.kt new file mode 100644 index 0000000..cfd8235 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/PieChart.kt @@ -0,0 +1,40 @@ +package com.casic.br.extensions + +import android.content.Context +import android.graphics.Color +import com.casic.br.R +import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.components.Legend +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.sp2px + +fun PieChart.init(context: Context) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(R.color.red) + this.getPaint(Chart.PAINT_INFO).textSize = 14f.sp2px(context).toFloat() + 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.blue.convertColor(context)) //图表文本字体颜色 + 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/br/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt new file mode 100644 index 0000000..665d815 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt @@ -0,0 +1,219 @@ +package com.casic.br.utils + +import com.casic.br.R +import com.casic.br.extensions.init +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.data.PieData +import com.github.mikephil.charting.data.PieDataSet +import com.github.mikephil.charting.data.PieEntry +import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.kt.lite.extensions.convertColor +import java.text.DecimalFormat + + +/** + * @author a203 + * @description 各种图初始化配置类 + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +object ChartViewHelper { +// /** +// * 单条折线图 +// * */ +// fun setSingleLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModel: LineChartEntryModel +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModel.entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// //设置数据 +// val dataSet = LineDataSet(entryModel.entryList, entryModel.entryList[0].data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = entryModel.lineColor +// //圆点颜色 +// dataSet.setCircleColor(entryModel.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = entryModel.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// if (xAxisDate.size == 1) { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[0] +// } +// } +// } else { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 多条折线图 +// * */ +// fun setLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModels: List +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModels[0].entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// entryModels.forEachIndexed { index, it -> +// //设置数据 +// val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = it.lineColor +// //圆点颜色 +// dataSet.setCircleColor(it.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = it.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// } +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 竖直柱状图 +// * */ +// fun setBarChartData( +// chart: BarChart, +// xAxisLabel: MutableList, +// entries: List, +// dateType: String +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_1.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType(dateType) +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } +// +// /** +// * 横向柱状图 +// * */ +// fun setBarChartData( +// chart: HorizontalBarChart, +// xAxisLabel: MutableList, +// entries: List +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_6.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType("") +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } + + /** + * 饼图 + * */ + fun setPieChartData(chart: PieChart, entries: List) { + //每次加载数据都初始化饼图 + chart.init(chart.context) + if (entries.isEmpty()) { + return + } + //绑定数据 + val dataSet = PieDataSet(entries, "") + dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙 + dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离 + //设置饼图块颜色 + val colors: MutableList = ArrayList() + for (i in entries.indices) { + colors.add(LocaleConstant.COLORS[i].convertColor(chart.context)) + } + dataSet.colors = colors + //设置标签显示在饼图块外面 + dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.valueLineColor = + R.color.mainThemeColor.convertColor(chart.context) + dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度 + dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度 + val data = PieData(dataSet) + data.setValueFormatter(object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0.0").format(value.toDouble()) + "t" + } + }) + data.setValueTextSize(12f) + data.setValueTextColor(R.color.mainThemeColor.convertColor(chart.context)) //数据值颜色 + chart.data = data + chart.highlightValues(null) + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c637fba..d042a7f 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -36,6 +36,12 @@ val DEVICE_PAGE_TITLE = arrayOf("设备控制", "状态显示", "服务设置") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + //预置颜色 + val COLORS = arrayOf( + 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 + ) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt index 4da3a68..4d3ce6a 100644 --- a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt @@ -1,7 +1,15 @@ package com.casic.br.view.home import com.casic.br.R +import com.casic.br.utils.ChartViewHelper +import com.github.mikephil.charting.data.PieEntry +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_gas_analysis.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.util.* class GasAnalysisActivity : KotlinBaseActivity() { @@ -12,11 +20,21 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "用气分析" } override fun initData() { - + val pieEntries: MutableList = ArrayList() + //饼图 + pieEntries.add(PieEntry(15f, "第一季度")) + pieEntries.add(PieEntry(45f, "第二季度")) + pieEntries.add(PieEntry(25f, "第三季度")) + pieEntries.add(PieEntry(25f, "第四季度")) + ChartViewHelper.setPieChartData(gasPieChart, pieEntries) } override fun initEvent() { diff --git a/app/build.gradle b/app/build.gradle index 62364a6..d143cf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,4 +116,6 @@ implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 //WebView implementation 'com.just.agentweb:agentweb-androidx:4.1.4' + //仿iOS风格RadioGroup + implementation 'info.hoang8f:android-segmented:1.0.6' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/PieChart.kt b/app/src/main/java/com/casic/br/extensions/PieChart.kt new file mode 100644 index 0000000..cfd8235 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/PieChart.kt @@ -0,0 +1,40 @@ +package com.casic.br.extensions + +import android.content.Context +import android.graphics.Color +import com.casic.br.R +import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.components.Legend +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.sp2px + +fun PieChart.init(context: Context) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(R.color.red) + this.getPaint(Chart.PAINT_INFO).textSize = 14f.sp2px(context).toFloat() + 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.blue.convertColor(context)) //图表文本字体颜色 + 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/br/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt new file mode 100644 index 0000000..665d815 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt @@ -0,0 +1,219 @@ +package com.casic.br.utils + +import com.casic.br.R +import com.casic.br.extensions.init +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.data.PieData +import com.github.mikephil.charting.data.PieDataSet +import com.github.mikephil.charting.data.PieEntry +import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.kt.lite.extensions.convertColor +import java.text.DecimalFormat + + +/** + * @author a203 + * @description 各种图初始化配置类 + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +object ChartViewHelper { +// /** +// * 单条折线图 +// * */ +// fun setSingleLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModel: LineChartEntryModel +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModel.entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// //设置数据 +// val dataSet = LineDataSet(entryModel.entryList, entryModel.entryList[0].data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = entryModel.lineColor +// //圆点颜色 +// dataSet.setCircleColor(entryModel.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = entryModel.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// if (xAxisDate.size == 1) { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[0] +// } +// } +// } else { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 多条折线图 +// * */ +// fun setLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModels: List +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModels[0].entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// entryModels.forEachIndexed { index, it -> +// //设置数据 +// val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = it.lineColor +// //圆点颜色 +// dataSet.setCircleColor(it.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = it.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// } +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 竖直柱状图 +// * */ +// fun setBarChartData( +// chart: BarChart, +// xAxisLabel: MutableList, +// entries: List, +// dateType: String +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_1.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType(dateType) +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } +// +// /** +// * 横向柱状图 +// * */ +// fun setBarChartData( +// chart: HorizontalBarChart, +// xAxisLabel: MutableList, +// entries: List +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_6.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType("") +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } + + /** + * 饼图 + * */ + fun setPieChartData(chart: PieChart, entries: List) { + //每次加载数据都初始化饼图 + chart.init(chart.context) + if (entries.isEmpty()) { + return + } + //绑定数据 + val dataSet = PieDataSet(entries, "") + dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙 + dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离 + //设置饼图块颜色 + val colors: MutableList = ArrayList() + for (i in entries.indices) { + colors.add(LocaleConstant.COLORS[i].convertColor(chart.context)) + } + dataSet.colors = colors + //设置标签显示在饼图块外面 + dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.valueLineColor = + R.color.mainThemeColor.convertColor(chart.context) + dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度 + dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度 + val data = PieData(dataSet) + data.setValueFormatter(object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0.0").format(value.toDouble()) + "t" + } + }) + data.setValueTextSize(12f) + data.setValueTextColor(R.color.mainThemeColor.convertColor(chart.context)) //数据值颜色 + chart.data = data + chart.highlightValues(null) + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c637fba..d042a7f 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -36,6 +36,12 @@ val DEVICE_PAGE_TITLE = arrayOf("设备控制", "状态显示", "服务设置") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + //预置颜色 + val COLORS = arrayOf( + 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 + ) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt index 4da3a68..4d3ce6a 100644 --- a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt @@ -1,7 +1,15 @@ package com.casic.br.view.home import com.casic.br.R +import com.casic.br.utils.ChartViewHelper +import com.github.mikephil.charting.data.PieEntry +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_gas_analysis.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.util.* class GasAnalysisActivity : KotlinBaseActivity() { @@ -12,11 +20,21 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "用气分析" } override fun initData() { - + val pieEntries: MutableList = ArrayList() + //饼图 + pieEntries.add(PieEntry(15f, "第一季度")) + pieEntries.add(PieEntry(45f, "第二季度")) + pieEntries.add(PieEntry(25f, "第三季度")) + pieEntries.add(PieEntry(25f, "第四季度")) + ChartViewHelper.setPieChartData(gasPieChart, pieEntries) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt b/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt index d85a95a..6073223 100644 --- a/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt @@ -1,7 +1,11 @@ package com.casic.br.view.home import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* class SubsidyActivity : KotlinBaseActivity() { @@ -12,7 +16,11 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "采暖补贴" } override fun initData() { diff --git a/app/build.gradle b/app/build.gradle index 62364a6..d143cf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,4 +116,6 @@ implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 //WebView implementation 'com.just.agentweb:agentweb-androidx:4.1.4' + //仿iOS风格RadioGroup + implementation 'info.hoang8f:android-segmented:1.0.6' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/PieChart.kt b/app/src/main/java/com/casic/br/extensions/PieChart.kt new file mode 100644 index 0000000..cfd8235 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/PieChart.kt @@ -0,0 +1,40 @@ +package com.casic.br.extensions + +import android.content.Context +import android.graphics.Color +import com.casic.br.R +import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.components.Legend +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.sp2px + +fun PieChart.init(context: Context) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(R.color.red) + this.getPaint(Chart.PAINT_INFO).textSize = 14f.sp2px(context).toFloat() + 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.blue.convertColor(context)) //图表文本字体颜色 + 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/br/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt new file mode 100644 index 0000000..665d815 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt @@ -0,0 +1,219 @@ +package com.casic.br.utils + +import com.casic.br.R +import com.casic.br.extensions.init +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.data.PieData +import com.github.mikephil.charting.data.PieDataSet +import com.github.mikephil.charting.data.PieEntry +import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.kt.lite.extensions.convertColor +import java.text.DecimalFormat + + +/** + * @author a203 + * @description 各种图初始化配置类 + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +object ChartViewHelper { +// /** +// * 单条折线图 +// * */ +// fun setSingleLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModel: LineChartEntryModel +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModel.entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// //设置数据 +// val dataSet = LineDataSet(entryModel.entryList, entryModel.entryList[0].data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = entryModel.lineColor +// //圆点颜色 +// dataSet.setCircleColor(entryModel.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = entryModel.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// if (xAxisDate.size == 1) { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[0] +// } +// } +// } else { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 多条折线图 +// * */ +// fun setLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModels: List +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModels[0].entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// entryModels.forEachIndexed { index, it -> +// //设置数据 +// val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = it.lineColor +// //圆点颜色 +// dataSet.setCircleColor(it.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = it.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// } +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 竖直柱状图 +// * */ +// fun setBarChartData( +// chart: BarChart, +// xAxisLabel: MutableList, +// entries: List, +// dateType: String +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_1.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType(dateType) +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } +// +// /** +// * 横向柱状图 +// * */ +// fun setBarChartData( +// chart: HorizontalBarChart, +// xAxisLabel: MutableList, +// entries: List +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_6.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType("") +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } + + /** + * 饼图 + * */ + fun setPieChartData(chart: PieChart, entries: List) { + //每次加载数据都初始化饼图 + chart.init(chart.context) + if (entries.isEmpty()) { + return + } + //绑定数据 + val dataSet = PieDataSet(entries, "") + dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙 + dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离 + //设置饼图块颜色 + val colors: MutableList = ArrayList() + for (i in entries.indices) { + colors.add(LocaleConstant.COLORS[i].convertColor(chart.context)) + } + dataSet.colors = colors + //设置标签显示在饼图块外面 + dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.valueLineColor = + R.color.mainThemeColor.convertColor(chart.context) + dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度 + dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度 + val data = PieData(dataSet) + data.setValueFormatter(object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0.0").format(value.toDouble()) + "t" + } + }) + data.setValueTextSize(12f) + data.setValueTextColor(R.color.mainThemeColor.convertColor(chart.context)) //数据值颜色 + chart.data = data + chart.highlightValues(null) + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c637fba..d042a7f 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -36,6 +36,12 @@ val DEVICE_PAGE_TITLE = arrayOf("设备控制", "状态显示", "服务设置") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + //预置颜色 + val COLORS = arrayOf( + 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 + ) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt index 4da3a68..4d3ce6a 100644 --- a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt @@ -1,7 +1,15 @@ package com.casic.br.view.home import com.casic.br.R +import com.casic.br.utils.ChartViewHelper +import com.github.mikephil.charting.data.PieEntry +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_gas_analysis.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.util.* class GasAnalysisActivity : KotlinBaseActivity() { @@ -12,11 +20,21 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "用气分析" } override fun initData() { - + val pieEntries: MutableList = ArrayList() + //饼图 + pieEntries.add(PieEntry(15f, "第一季度")) + pieEntries.add(PieEntry(45f, "第二季度")) + pieEntries.add(PieEntry(25f, "第三季度")) + pieEntries.add(PieEntry(25f, "第四季度")) + ChartViewHelper.setPieChartData(gasPieChart, pieEntries) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt b/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt index d85a95a..6073223 100644 --- a/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt @@ -1,7 +1,11 @@ package com.casic.br.view.home import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* class SubsidyActivity : KotlinBaseActivity() { @@ -12,7 +16,11 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "采暖补贴" } override fun initData() { diff --git a/app/src/main/res/layout/activity_gas_analysis.xml b/app/src/main/res/layout/activity_gas_analysis.xml index 5dd8df0..f1d9057 100644 --- a/app/src/main/res/layout/activity_gas_analysis.xml +++ b/app/src/main/res/layout/activity_gas_analysis.xml @@ -7,5 +7,63 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 62364a6..d143cf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,4 +116,6 @@ implementation 'com.getui:gtc:3.1.9.0' //个推核心组件 //WebView implementation 'com.just.agentweb:agentweb-androidx:4.1.4' + //仿iOS风格RadioGroup + implementation 'info.hoang8f:android-segmented:1.0.6' } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/extensions/PieChart.kt b/app/src/main/java/com/casic/br/extensions/PieChart.kt new file mode 100644 index 0000000..cfd8235 --- /dev/null +++ b/app/src/main/java/com/casic/br/extensions/PieChart.kt @@ -0,0 +1,40 @@ +package com.casic.br.extensions + +import android.content.Context +import android.graphics.Color +import com.casic.br.R +import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.charts.Chart +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.components.Legend +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.sp2px + +fun PieChart.init(context: Context) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(R.color.red) + this.getPaint(Chart.PAINT_INFO).textSize = 14f.sp2px(context).toFloat() + 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.blue.convertColor(context)) //图表文本字体颜色 + 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/br/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt new file mode 100644 index 0000000..665d815 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/ChartViewHelper.kt @@ -0,0 +1,219 @@ +package com.casic.br.utils + +import com.casic.br.R +import com.casic.br.extensions.init +import com.github.mikephil.charting.charts.PieChart +import com.github.mikephil.charting.data.PieData +import com.github.mikephil.charting.data.PieDataSet +import com.github.mikephil.charting.data.PieEntry +import com.github.mikephil.charting.formatter.ValueFormatter +import com.pengxh.kt.lite.extensions.convertColor +import java.text.DecimalFormat + + +/** + * @author a203 + * @description 各种图初始化配置类 + * @date 2022/2/15 16:24 + * @email 290677893@qq.com + */ +object ChartViewHelper { +// /** +// * 单条折线图 +// * */ +// fun setSingleLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModel: LineChartEntryModel +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModel.entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// //设置数据 +// val dataSet = LineDataSet(entryModel.entryList, entryModel.entryList[0].data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = entryModel.lineColor +// //圆点颜色 +// dataSet.setCircleColor(entryModel.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = entryModel.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// if (xAxisDate.size == 1) { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[0] +// } +// } +// } else { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 多条折线图 +// * */ +// fun setLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModels: List +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModels[0].entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// entryModels.forEachIndexed { index, it -> +// //设置数据 +// val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = it.lineColor +// //圆点颜色 +// dataSet.setCircleColor(it.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = it.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// } +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 竖直柱状图 +// * */ +// fun setBarChartData( +// chart: BarChart, +// xAxisLabel: MutableList, +// entries: List, +// dateType: String +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_1.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType(dateType) +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } +// +// /** +// * 横向柱状图 +// * */ +// fun setBarChartData( +// chart: HorizontalBarChart, +// xAxisLabel: MutableList, +// entries: List +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_6.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType("") +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } + + /** + * 饼图 + * */ + fun setPieChartData(chart: PieChart, entries: List) { + //每次加载数据都初始化饼图 + chart.init(chart.context) + if (entries.isEmpty()) { + return + } + //绑定数据 + val dataSet = PieDataSet(entries, "") + dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙 + dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离 + //设置饼图块颜色 + val colors: MutableList = ArrayList() + for (i in entries.indices) { + colors.add(LocaleConstant.COLORS[i].convertColor(chart.context)) + } + dataSet.colors = colors + //设置标签显示在饼图块外面 + dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.valueLineColor = + R.color.mainThemeColor.convertColor(chart.context) + dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度 + dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度 + val data = PieData(dataSet) + data.setValueFormatter(object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0.0").format(value.toDouble()) + "t" + } + }) + data.setValueTextSize(12f) + data.setValueTextColor(R.color.mainThemeColor.convertColor(chart.context)) //数据值颜色 + chart.data = data + chart.highlightValues(null) + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c637fba..d042a7f 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -36,6 +36,12 @@ val DEVICE_PAGE_TITLE = arrayOf("设备控制", "状态显示", "服务设置") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + //预置颜色 + val COLORS = arrayOf( + 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 + ) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt index 4da3a68..4d3ce6a 100644 --- a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt @@ -1,7 +1,15 @@ package com.casic.br.view.home import com.casic.br.R +import com.casic.br.utils.ChartViewHelper +import com.github.mikephil.charting.data.PieEntry +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_gas_analysis.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.util.* class GasAnalysisActivity : KotlinBaseActivity() { @@ -12,11 +20,21 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "用气分析" } override fun initData() { - + val pieEntries: MutableList = ArrayList() + //饼图 + pieEntries.add(PieEntry(15f, "第一季度")) + pieEntries.add(PieEntry(45f, "第二季度")) + pieEntries.add(PieEntry(25f, "第三季度")) + pieEntries.add(PieEntry(25f, "第四季度")) + ChartViewHelper.setPieChartData(gasPieChart, pieEntries) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt b/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt index d85a95a..6073223 100644 --- a/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt @@ -1,7 +1,11 @@ package com.casic.br.view.home import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* class SubsidyActivity : KotlinBaseActivity() { @@ -12,7 +16,11 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "采暖补贴" } override fun initData() { diff --git a/app/src/main/res/layout/activity_gas_analysis.xml b/app/src/main/res/layout/activity_gas_analysis.xml index 5dd8df0..f1d9057 100644 --- a/app/src/main/res/layout/activity_gas_analysis.xml +++ b/app/src/main/res/layout/activity_gas_analysis.xml @@ -7,5 +7,63 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_historical_bill.xml b/app/src/main/res/layout/activity_historical_bill.xml index d3261bf..776468a 100644 --- a/app/src/main/res/layout/activity_historical_bill.xml +++ b/app/src/main/res/layout/activity_historical_bill.xml @@ -16,11 +16,11 @@ + android:padding="@dimen/dp_10"> , entryModel: LineChartEntryModel +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModel.entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// //设置数据 +// val dataSet = LineDataSet(entryModel.entryList, entryModel.entryList[0].data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = entryModel.lineColor +// //圆点颜色 +// dataSet.setCircleColor(entryModel.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = entryModel.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// if (xAxisDate.size == 1) { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[0] +// } +// } +// } else { +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 多条折线图 +// * */ +// fun setLineChartData( +// chart: LineChart, xAxisDate: MutableList, entryModels: List +// ) { +// //每次加载数据都初始化折线图 +// chart.init(chart.context) +// if (entryModels[0].entryList.isEmpty()) { +// return +// } +// //绑定数据 +// val lineDataSets: MutableList = ArrayList() +// entryModels.forEachIndexed { index, it -> +// //设置数据 +// val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) +// dataSet.setDrawCircles(true) +// //线条颜色 +// dataSet.color = it.lineColor +// //圆点颜色 +// dataSet.setCircleColor(it.lineColor) +// dataSet.setDrawFilled(true) +// dataSet.fillColor = it.lineColor +// dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER +// lineDataSets.add(dataSet) +// } +// val lineData = LineData(lineDataSets) +// lineData.setDrawValues(false) +// //添加自定义Marker +// val markerView = LineChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisDate(xAxisDate) +// chart.marker = markerView +// //设置X轴坐标 +// val xAxis = chart.xAxis +// xAxis.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return xAxisDate[value.toInt()] +// } +// } +// chart.data = lineData +// chart.invalidate() +// } +// +// /** +// * 竖直柱状图 +// * */ +// fun setBarChartData( +// chart: BarChart, +// xAxisLabel: MutableList, +// entries: List, +// dateType: String +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_1.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType(dateType) +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } +// +// /** +// * 横向柱状图 +// * */ +// fun setBarChartData( +// chart: HorizontalBarChart, +// xAxisLabel: MutableList, +// entries: List +// ) { +// //每次加载数据都初始化饼图 +// chart.init(chart.context, xAxisLabel) +// val barDataSets: MutableList = ArrayList() +// //绑定数据 +// val dataSet = BarDataSet(entries, "") +// dataSet.color = R.color.color_6.convertColor(chart.context) +// dataSet.valueFormatter = object : ValueFormatter() { +// override fun getFormattedValue(value: Float): String { +// return DecimalFormat("##0").format(value.toDouble()) +// } +// } +// barDataSets.add(dataSet) +// val barData = BarData(barDataSets) +// barData.barWidth = 0.5f +// //添加自定义Marker +// val markerView = BarChartMarkerView(chart.context) +// markerView.chartView = chart +// markerView.setXAxisLabel(xAxisLabel) +// markerView.setBarDataType("") +// chart.marker = markerView +// chart.data = barData +// chart.invalidate() +// } + + /** + * 饼图 + * */ + fun setPieChartData(chart: PieChart, entries: List) { + //每次加载数据都初始化饼图 + chart.init(chart.context) + if (entries.isEmpty()) { + return + } + //绑定数据 + val dataSet = PieDataSet(entries, "") + dataSet.sliceSpace = 1.5f //设置饼状块之间的间隙 + dataSet.selectionShift = 5f //设置饼状块被选中时突出的距离 + //设置饼图块颜色 + val colors: MutableList = ArrayList() + for (i in entries.indices) { + colors.add(LocaleConstant.COLORS[i].convertColor(chart.context)) + } + dataSet.colors = colors + //设置标签显示在饼图块外面 + dataSet.xValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.yValuePosition = PieDataSet.ValuePosition.OUTSIDE_SLICE + dataSet.valueLineColor = + R.color.mainThemeColor.convertColor(chart.context) + dataSet.valueLinePart1Length = 0.55f //标签指示线前半截长度 + dataSet.valueLinePart2Length = 0.65f //标签指示线后半截长度 + val data = PieData(dataSet) + data.setValueFormatter(object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0.0").format(value.toDouble()) + "t" + } + }) + data.setValueTextSize(12f) + data.setValueTextColor(R.color.mainThemeColor.convertColor(chart.context)) //数据值颜色 + chart.data = data + chart.highlightValues(null) + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index c637fba..d042a7f 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -36,6 +36,12 @@ val DEVICE_PAGE_TITLE = arrayOf("设备控制", "状态显示", "服务设置") val CONNECT_IMAGE = intArrayOf(R.drawable.ic_kefu, R.drawable.ic_weixiu) val CONNECT_ARRAY = arrayOf("客服电话", "抢修电话") + //预置颜色 + val COLORS = arrayOf( + 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 + ) /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt index 4da3a68..4d3ce6a 100644 --- a/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/GasAnalysisActivity.kt @@ -1,7 +1,15 @@ package com.casic.br.view.home import com.casic.br.R +import com.casic.br.utils.ChartViewHelper +import com.github.mikephil.charting.data.PieEntry +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_gas_analysis.* +import kotlinx.android.synthetic.main.include_base_title.* +import java.util.* class GasAnalysisActivity : KotlinBaseActivity() { @@ -12,11 +20,21 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "用气分析" } override fun initData() { - + val pieEntries: MutableList = ArrayList() + //饼图 + pieEntries.add(PieEntry(15f, "第一季度")) + pieEntries.add(PieEntry(45f, "第二季度")) + pieEntries.add(PieEntry(25f, "第三季度")) + pieEntries.add(PieEntry(25f, "第四季度")) + ChartViewHelper.setPieChartData(gasPieChart, pieEntries) } override fun initEvent() { diff --git a/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt b/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt index d85a95a..6073223 100644 --- a/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt +++ b/app/src/main/java/com/casic/br/view/home/SubsidyActivity.kt @@ -1,7 +1,11 @@ package com.casic.br.view.home import com.casic.br.R +import com.gyf.immersionbar.ImmersionBar import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.include_base_title.* class SubsidyActivity : KotlinBaseActivity() { @@ -12,7 +16,11 @@ } override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(true).init() + ImmerseStatusBarUtil.setColor(this, R.color.white.convertColor(this)) + leftBackView.setOnClickListener { finish() } + titleView.text = "采暖补贴" } override fun initData() { diff --git a/app/src/main/res/layout/activity_gas_analysis.xml b/app/src/main/res/layout/activity_gas_analysis.xml index 5dd8df0..f1d9057 100644 --- a/app/src/main/res/layout/activity_gas_analysis.xml +++ b/app/src/main/res/layout/activity_gas_analysis.xml @@ -7,5 +7,63 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_historical_bill.xml b/app/src/main/res/layout/activity_historical_bill.xml index d3261bf..776468a 100644 --- a/app/src/main/res/layout/activity_historical_bill.xml +++ b/app/src/main/res/layout/activity_historical_bill.xml @@ -16,11 +16,11 @@ + android:padding="@dimen/dp_10"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +