【问题标题】:Kotlin: setting custom labels on x axis in line chart MpandroidchartKotlin:在折线图 Mpandroidchart 的 x 轴上设置自定义标签
【发布时间】:2020-03-06 17:29:57
【问题描述】:

我有一个包含很多日期的字符串数组列表(4500 个应用程序),我需要将所有这些日期放在我用 MPAndroidChart 创建的图表的 xAxis 上,我如何在 Kotlin 中做到这一点?

这是我的代码:

 val chart= ChartUtils()
    val mChart:LineChart = root.findViewById(R.id.lineChartEvolCuota) as LineChart

    mChart.isDragEnabled = true
    mChart.setScaleEnabled(false)
    mChart.axisRight.isEnabled=false
    val test : MutableList<object> = db.Object()
    val yArray= ArrayList<Entry>()
    val xLabel  = ArrayList<String>()

    var c = 0f
    for (i in test){
        yArray.add(Entry(c, i.value!!.toFloat()))
        xLabel.add(i.date.toString())
        c+=1f
    }

    val xaxis:XAxis = mChart.xAxis
    xaxis.granularity=1f

    val set1 = LineDataSet(yFondoA, "TEST")
    set1 .color = Color.parseColor(color)
    set1 .setDrawCircles(false)
    set1 .setDrawValues(false)
    val data = LineData(set1)
    mChart.data = data
    mChart.setVisibleXRangeMaximum(365f)
    mChart.moveViewToX(c)

解决方案

 val xaxis:XAxis = mChart.xAxis
    xaxis.granularity=1f
    xaxis.setValueFormatter(object : ValueFormatter() {
        val pattern = "dd MMM yy"
        private val mFormat = SimpleDateFormat(pattern)
        private val inputFormat = SimpleDateFormat("yyyy-MM-dd")
        override fun getFormattedValue(value: Float): String {
            val millis = TimeUnit.HOURS.toMillis(value.toLong())
            return mFormat.format(inputFormat.parse(xLabel[value.toInt()]))
        }
    })

【问题讨论】:

    标签: android kotlin mpandroidchart


    【解决方案1】:

    我找到了一个不错的 java 示例 here,我认为它会对您有所帮助:

    xAxis.setValueFormatter(new ValueFormatter() {
    
                private final SimpleDateFormat mFormat = new SimpleDateFormat("dd MMM HH:mm", Locale.ENGLISH);
    
                @Override
                public String getFormattedValue(float value) {
    
                    long millis = TimeUnit.HOURS.toMillis((long) value);
                    return mFormat.format(new Date(millis));
                }
            });
    

    将 java 段复制到您的代码时,您的 jetbrains IDE 会要求您自动转换为 kotlin。

    使用自定义格式化程序比手动设置标签更简洁。 根据从数据中提取日期的方式,您可能需要调整示例中的以下行:

    long millis = TimeUnit.HOURS.toMillis((long) value);
    

    另请注意,您将标签添加到列表中,但之后从未使用它们,这就是您看不到它们的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多