From 897ffe5e29ab022d75ad948ecf894e0a3ed3b2f5 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期二, 04 三月 2025 18:01:41 +0800 Subject: [PATCH] fix: 1 --- app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt | 102 ++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 88 insertions(+), 14 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 f0e308a..f32868e 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 @@ -20,8 +20,10 @@ import com.github.mikephil.charting.components.XAxis import com.github.mikephil.charting.data.* import com.github.mikephil.charting.formatter.IndexAxisValueFormatter +import com.github.mikephil.charting.formatter.ValueFormatter import java.util.* import java.text.SimpleDateFormat +import android.util.Log class DashboardFragment : Fragment() { @@ -132,53 +134,115 @@ setupPieChart() } private fun setupBarChart() { - // 配置柱状图 barChart.apply { description.isEnabled = false setDrawGridBackground(false) legend.isEnabled = false + + // 增大图表高度 + minimumHeight = (resources.displayMetrics.density * 300).toInt() // X轴设置 xAxis.apply { position = XAxis.XAxisPosition.BOTTOM setDrawGridLines(false) - valueFormatter = IndexAxisValueFormatter(getDayLabels()) + granularity = 1f + labelRotationAngle = -45f + textSize = 10f } // Y轴设置 axisLeft.apply { setDrawGridLines(true) axisMinimum = 0f + granularity = 1f + valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return value.toInt().toString() + } + } } axisRight.isEnabled = false + + // 设置图表交互 + setTouchEnabled(true) + isDragEnabled = true + setScaleEnabled(true) } updateBarChartData() } private fun updateBarChartData() { - viewModel.getDailyStats(currentDate.timeInMillis).observe(viewLifecycleOwner) { stats -> + viewModel.getDailyStats().observe(viewLifecycleOwner) { stats -> + // 添加调试日志 + Log.d("DashboardFragment", "Stats size: ${stats.size}") + stats.forEach { stat -> + Log.d("DashboardFragment", "Week: ${stat.date}, Count: ${stat.count}, Start: ${stat.week_start}") + } + + if (stats.isEmpty()) { + Log.d("DashboardFragment", "No data found") + return@observe + } + val entries = stats.mapIndexed { index, stat -> BarEntry(index.toFloat(), stat.count.toFloat()) } val dataSet = BarDataSet(entries, "包裹数量") dataSet.color = resources.getColor(R.color.purple_500) + dataSet.valueTextSize = 12f - barChart.data = BarData(dataSet) + val barData = BarData(dataSet) + barChart.data = barData + + // 设置X轴标签 + barChart.xAxis.apply { + valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + val position = value.toInt() + if (position >= 0 && position < stats.size) { + val weekNum = stats[position].date.toIntOrNull() ?: 0 + // 获取月份信息 + val monthDay = stats[position].week_start?.let { + SimpleDateFormat("MM-dd", Locale.getDefault()).format( + SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).parse(it) + ) + } ?: "" + return "${monthDay}\n第${weekNum}周" + } + return "" + } + } + labelCount = stats.size + } + + barChart.notifyDataSetChanged() barChart.invalidate() } } private fun setupPieChart() { - // 配置饼图 pieChart.apply { description.isEnabled = false - setUsePercentValues(true) + setUsePercentValues(false) // 改为显示实际数量 setDrawEntryLabels(false) - - legend.isEnabled = true - legend.verticalAlignment = Legend.LegendVerticalAlignment.CENTER - legend.horizontalAlignment = Legend.LegendHorizontalAlignment.RIGHT - legend.orientation = Legend.LegendOrientation.VERTICAL + + // 增大饼图尺寸 + setExtraOffsets(20f, 10f, 80f, 10f) + minimumHeight = (resources.displayMetrics.density * 400).toInt() // 设置最小高度 + + // 配置图例 + legend.apply { + isEnabled = true + verticalAlignment = Legend.LegendVerticalAlignment.CENTER + horizontalAlignment = Legend.LegendHorizontalAlignment.RIGHT + orientation = Legend.LegendOrientation.VERTICAL + setDrawInside(false) + xEntrySpace = 7f + yEntrySpace = 0f + yOffset = 0f + textSize = 12f // 增大图例文字大小 + } } updatePieChartData() @@ -186,16 +250,26 @@ private fun updatePieChartData() { viewModel.getCourierStats(currentDate.timeInMillis).observe(viewLifecycleOwner) { stats -> val entries = stats.map { stat -> - PieEntry(stat.count.toFloat(), stat.courierName) + PieEntry(stat.count.toFloat(), "${stat.courierName}(${stat.count})") } val dataSet = PieDataSet(entries, "快递公司分布") dataSet.colors = listOf( resources.getColor(R.color.purple_500), - resources.getColor(R.color.teal_200) + resources.getColor(R.color.teal_200), + resources.getColor(R.color.purple_200), + resources.getColor(R.color.teal_700) ) + dataSet.valueTextSize = 14f // 增大数值文字大小 - pieChart.data = PieData(dataSet) + val pieData = PieData(dataSet) + pieData.setValueFormatter(object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return value.toInt().toString() + } + }) + + pieChart.data = pieData pieChart.invalidate() } } -- Gitblit v1.9.3