From 04ad2e514cdd2e5ba5128ea2d763cd67d687324c Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期四, 06 三月 2025 11:40:02 +0800
Subject: [PATCH] fix: 4
---
app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt | 108 +++++++++++++++++++++++++++++++++--------------------
1 files changed, 67 insertions(+), 41 deletions(-)
diff --git a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt
index cecb616..6b36837 100644
--- a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt
+++ b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt
@@ -162,23 +162,19 @@
position = XAxis.XAxisPosition.BOTTOM
setDrawGridLines(false)
granularity = 1f
- labelRotationAngle = -45f
- textSize = 10f
+ labelRotationAngle = 0f
+ textSize = 12f
+ setExtraBottomOffset(15f)
}
// Y轴设置
axisLeft.apply {
setDrawGridLines(true)
axisMinimum = 0f
- granularity = 0.5f // 将刻度间隔设为0.5
+ granularity = 1f
valueFormatter = object : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
- // 只有整数时才显示标签
- return if (value % 1 == 0f) {
- value.toInt().toString()
- } else {
- ""
- }
+ return if (value > 0) value.toInt().toString() else ""
}
}
}
@@ -188,6 +184,9 @@
setTouchEnabled(true)
isDragEnabled = true
setScaleEnabled(true)
+
+ // 设置边距
+ setExtraOffsets(10f, 10f, 10f, 20f)
}
updateBarChartData()
@@ -207,7 +206,11 @@
if (stats.isEmpty()) return@observe
val entries = stats.mapIndexed { index, stat ->
- BarEntry(index.toFloat(), stat.count.toFloat())
+ val entry = BarEntry(index.toFloat(), stat.count.toFloat())
+ if (stat.count == 0) {
+ entry.data = "hide_label"
+ }
+ entry
}
val dataSet = BarDataSet(entries, "包裹数量")
@@ -216,7 +219,7 @@
valueTextSize = 12f
valueFormatter = object : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
- return value.toInt().toString()
+ return if (value > 0) value.toInt().toString() else ""
}
}
}
@@ -233,13 +236,27 @@
return when(currentDateType) {
DateType.WEEK -> {
val weekStat = stats[position]
- val calendar = Calendar.getInstance()
- calendar.timeInMillis = weekStat.weekStart!!
- SimpleDateFormat("MM/dd", Locale.getDefault()).format(calendar.time)
+ try {
+ // 解析日期字符串
+ val sdf = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
+ val date = sdf.parse(weekStat.date)
+ val calendar = Calendar.getInstance()
+ calendar.time = date
+
+ // 获取年份和周数
+ val weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR)
+ val year = calendar.get(Calendar.YEAR)
+
+ // 显示格式:第X周
+// "第${weekOfYear}周"
+ "${weekOfYear}"
+ } catch (e: Exception) {
+ weekStat.date
+ }
}
+// DateType.MONTH -> "${stats[position].date}月"
DateType.MONTH -> {
- // 显示月份标签(1-12月)
- "${position + 1}月"
+ stats[position].date.replaceFirst("^0+".toRegex(), "")
}
else -> ""
}
@@ -247,15 +264,16 @@
return ""
}
}
- position = XAxis.XAxisPosition.BOTTOM
- setDrawGridLines(false)
labelCount = stats.size
- granularity = 1f
- labelRotationAngle = -45f
- textSize = 10f
+ setAvoidFirstLastClipping(true)
+ labelRotationAngle = 0f
+
+ // 增加标签间距
+// setExtraBottomOffset(20f)
+ textSize = 11f // 稍微调小字体
}
- // 高亮当前月份
+ // 高亮显示
if (currentDateType == DateType.MONTH) {
val currentMonth = currentDate.get(Calendar.MONTH)
dataSet.setColors(List(stats.size) { index ->
@@ -263,42 +281,50 @@
else resources.getColor(R.color.purple_200)
})
} else if (currentDateType == DateType.WEEK) {
- // 保持周视图的高亮逻辑
- val highlightIndex = 3f
+ val highlightIndex = 3 // 当前周在第4个位置
dataSet.setColors(List(stats.size) { index ->
- if (index == 3) resources.getColor(R.color.purple_500)
+ if (index == highlightIndex) resources.getColor(R.color.purple_500)
else resources.getColor(R.color.purple_200)
})
}
+ // 刷新图表
+ barChart.notifyDataSetChanged()
barChart.invalidate()
}
}
private fun setupPieChart() {
pieChart.apply {
+ // 隐藏图表描述(右下角默认文字)
description.isEnabled = false
+ // 显示实际值而非百分比
setUsePercentValues(false)
+ // 隐藏饼图区块上的标签(如数值或名称)
setDrawEntryLabels(false)
-
- // 调整饼图边距
- setExtraOffsets(20f, 10f, 60f, 10f)
-
+
+ // 设置饼图与容器的边距,参数顺序:左、上、右、下
+ // 右侧留出 80f 空间,可能为图例腾出位置
+ setExtraOffsets(20f, 20f, 20f, 20f)
+
+
+
// 配置图例
legend.apply {
- isEnabled = true
- verticalAlignment = Legend.LegendVerticalAlignment.CENTER
- horizontalAlignment = Legend.LegendHorizontalAlignment.RIGHT
- orientation = Legend.LegendOrientation.VERTICAL
- setDrawInside(false)
- xEntrySpace = 10f
- yEntrySpace = 5f
- yOffset = 0f
- textSize = 14f
+ isEnabled = true // 启用图例
+ verticalAlignment = Legend.LegendVerticalAlignment.CENTER // 垂直居中
+ horizontalAlignment = Legend.LegendHorizontalAlignment.RIGHT // 水平靠右对齐
+ orientation = Legend.LegendOrientation.VERTICAL // 图例项垂直排列
+ setDrawInside(false) // 图例绘制在图表外部(而非覆盖在图上)
+ xEntrySpace = 10f // 图例项水平间距
+ yEntrySpace = 5f // 图例项垂直间距
+ yOffset = 0f // 图例整体 Y 轴无偏移
+ textSize = 12f // 图例文字大小
}
- // 设置中心空白
- holeRadius = 45f
- transparentCircleRadius = 50f
+ // 调整中心空白区域大小
+ holeRadius = 20f // 中间空心圆的半径(占饼图比例)
+ transparentCircleRadius = 25f // 透明圆圈的半径(可能用于边框效果)
+
}
updatePieChartData()
--
Gitblit v1.9.3