Android Mp图表为日期设置了自定义X轴

时间:2018-06-25 08:02:00

标签: android android-layout mpandroidchart

我正在将mpchart用于android v3.0.3版本。我试图相对于日期设置“自定义x轴”值,但无法获得所需的结果。

我的条条目的值如下:

[Entry, x: 20.0 y: 21.0, Entry, x: 23.0 y: 22.0, Entry, x: 17.0 y: 23.0, Entry, x: 11.0 y: 24.0, Entry, x: 61.0 y: 26.0, Entry, x: 39.0 y: 27.0, Entry, x: 19.0 y: 28.0, Entry, x: 18.0 y: 29.0, Entry, x: 16.0 y: 30.0, Entry, x: 13.0 y: 0.0, Entry, x: 11.0 y: 2.0, Entry, x: 12.0 y: 3.0, Entry, x: 39.0 y: 4.0, Entry, x: 25.0 y: 5.0, Entry, x: 16.0 y: 6.0, Entry, x: 29.0 y: 7.0, Entry, x: 30.0 y: 8.0, Entry, x: 48.0 y: 9.0, Entry, x: 18.0 y: 10.0, Entry, x: 36.0 y: 11.0, Entry, x: 42.0 y: 12.0, Entry, x: 46.0 y: 13.0, Entry, x: 70.0 y: 14.0, Entry, x: 48.0 y: 15.0, Entry, x: 14.0 y: 16.0, Entry, x: 23.0 y: 17.0, Entry, x: 16.0 y: 18.0, Entry, x: 13.0 y: 19.0, Entry, x: 27.0 y: 20.0, Entry, x: 7.0 y: 21.0, Entry, x: 25.0 y: 23.0, Entry, x: 9.0 y: 24.0] 

我要在x轴上设置的条目的期望值如下:

[22 May , 23 May , 24 May , 25 May , 27 May , 28 May , 29 May , 30 May , 31 May , 01 Jun , 03 Jun , 04 Jun , 05 Jun , 06 Jun , 07 Jun , 08 Jun , 09 Jun , 10 Jun , 11 Jun , 12 Jun , 13 Jun , 14 Jun , 15 Jun , 16 Jun , 17 Jun , 18 Jun , 19 Jun , 20 Jun , 21 Jun , 22 Jun , 24 Jun , 25 Jun ]

设置自定义X轴值的代码如下:

public class CustomXAxisValueFormatter implements IAxisValueFormatter {
    ArrayList<String> mIndexForXaxis;

    public CustomXAxisValueFormatter(ArrayList<String> indexForXaxis){
        this.mIndexForXaxis = indexForXaxis;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        AppLogger.i("Print index values: "+mIndexForXaxis);
        String returnIndex = null;
        for(int i = 0 ; i < mIndexForXaxis.size(); i++){
            AppLogger.i("Print index values: "+mIndexForXaxis.get(i));
            returnIndex = mIndexForXaxis.get(i);
        }

        return returnIndex;
    }
}

我将上面的日期数组作为indexForXaxis传递给该类,例如5月22日等。

但是,所反映的图形如下

enter image description here

我了解其仅从索引列表中获取最后一个值。那么反映日期的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

在科特林:

val labels = mutableListOf<String>()
labels.add("1 Jan")
labels.add("2 Jan")
labels.add("3 Apr")
labels.add("5 Jun")
labels.add("10 Des")

val datas = mutableListOf<Entry>()
datas.add(Entry(0f, 20f))
datas.add(Entry(1f, 40f))
datas.add(Entry(2f, 30f))
datas.add(Entry(3f, 70f))
datas.add(Entry(4f, 20f))

val xAxis = linechart.getXAxis()
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 
xAxis.setDrawAxisLine(true);
xAxis.setDrawGridLines(false);
xAxis.setDrawLabels(true);
xAxis.labelCount = labels.size // important
xAxis.setSpaceMax(0.5f) // optional
xAxis.setSpaceMin(0.5f) // optional
xAxis.valueFormatter = object : ValueFormatter() {
    override
    fun getFormattedValue(value: Float): String {
            // value is x as index
            return labels[value.toInt()]
        }
    }

答案 1 :(得分:0)

尝试一下。希望此解决方案对您有帮助,

101

动态日期格式,

XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);
xAxis.setTextSize(10f);
xAxis.setTextColor(Color.RED);
xAxis.setDrawAxisLine(true);
xAxis.setDrawGridLines(false);