【问题标题】:MPAndroidChart v3.x.x: upgraded from 2.x.x labelsMPAndroidChart v3.x.x:从 2.x.x 标签升级
【发布时间】:2017-01-24 02:20:20
【问题描述】:

正如标题中提到的,我正在开发一个使用 MPAndroidChart 版本 2.2.3 的项目。本项目目前使用的是条形图。

我正在做升级到3.0.1的版本。升级后,以下几件事不再起作用:

1.

mBarChart.setDescription("");

2.

xAxis.setSpaceBetweenLabels(1);

3.

BarData barData = new BarData(ArrayList<String>, ArrayList<IBarDataSet>);

我环顾四周,但似乎没有对这些问题的解释,即使在发行说明中也是如此。

【问题讨论】:

    标签: android mpandroidchart


    【解决方案1】:

    第一个问题

    mBarChart.setDescription(); 不再工作了

    根据this answer here,现在设置描述的正确方法是:

        mChart.getDescription().setText("Description of my chart);
    

    第三个问题

    BarData barData = new BarData(ArrayList&lt;String&gt;, ArrayList&lt;IBarDataSet&gt;); 不再工作了

    添加标签的方法与以前不同。在 MPAndroidChart 2.x.x 中,您可以将 xIndex 标签作为 ArrayList&lt;String&gt; 参数传递给 BarData 的构造函数。如果您在 3.x.x 中尝试这样做,您将收到如下消息:

    BarData (com.github.mikephil.charting.interfaces.datasets.IBarDataSet...) in BarData cannot be applied to (java.lang.String[],java.util.ArrayList<com.github.mikephil.charting.interfaces.datasets.IBarDataSet>)
    

    这适用于许多流行但过时的教程,例如Truition tutorial for MPAndroidChart here

    相反,在 MPAndroidChart 3.x.x 中,执行此操作的方法是使用 IAxisValueFormatter。此接口有一个方法getFormattedValue(float value, AxisBase axis),您可以实现该方法以编程方式生成您的标签。

    sample projectanswer here中有一个例子

    总之,在 MPAndroidChart3.x.x 中向 BarChart 添加数据的正确方法如下(根据示例项目中的示例):

     ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
     dataSets.add(set1);
     BarData data = new BarData(dataSets);
     mChart.setData(data);
     mChart.getXAxis().setValueFormatter(new MyCustomValueFormatter()); // your own class that implements IAxisValueFormatter
    

    注意:如果您必须为您的标签使用ArrayList&lt;String&gt;,您可以使用便利类IndexAxisValueFormatter

    你这样消费它:

    List<String> labels;
    //TODO: code to generate labels, then
    mChart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(labels));
    

    你需要:

    mChart.getXAxis().setGranularity(1);
    mChart.getXAxis().setGranularityEnabled(true);
    

    模仿 MPAndroidChart 2.x.x 的行为,其中只有整数 xIndices 接收标签。

    至于您的第二个问题,因为标签功能由IAxisValueFormatter 非常精细地控制,您将不再需要setSpaceBetweenLabels()

    【讨论】:

    • 嗨,大卫,感谢您的回答。那么在这种情况下,ArrayList 会在哪里呢?我还应该在 YAxis 中手动设置它吗?我该怎么做?谢谢。顺便说一句,问题 1 和 2 已得到解答。谢谢。
    • 我认为这是根据示例项目:ArrayList&lt;IBarDataSet&gt; dataSets = new ArrayList&lt;IBarDataSet&gt;(); dataSets.add(set1); BarData data = new BarData(dataSets);
    • 它对我有用。我知道了。所以现在我们不能再将 ArrayList 设置为构造函数,而必须在 setValueFormatter 中单独进行。非常感谢。你救了我几天;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2020-05-22
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多