MPAndroidChart各种条形图宽度的条形图

MPAndroidChart各种条形图宽度的条形图,android,bar-chart,mpandroidchart,Android,Bar Chart,Mpandroidchart,我需要创建一个图表,沿x轴有时间,沿y轴有区域。程序将记录某个活动的某个时间差上的数据,并将数据显示在图形中,有点像->但每个其他条都将交替颜色以对应单独的活动。我还没有找到使用MPAndroidChart的方法,每个条目似乎都有一个固定的宽度。如果有人知道如何使用MPAndroidChart或其他开源库实现这一点,将不胜感激,谢谢 编辑: 这是我一直尝试使用的代码: protected void onCreate(Bundle savedInstanceState) { super.o

我需要创建一个图表,沿x轴有时间,沿y轴有区域。程序将记录某个活动的某个时间差上的数据,并将数据显示在图形中,有点像->但每个其他条都将交替颜色以对应单独的活动。我还没有找到使用MPAndroidChart的方法,每个条目似乎都有一个固定的宽度。如果有人知道如何使用MPAndroidChart或其他开源库实现这一点,将不胜感激,谢谢

编辑:

这是我一直尝试使用的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_data_report);  

    BarChart barChart = (BarChart) findViewById(R.id.barChart);
    List<BarEntry> entries = generateBarEntries();
    BarDataSet set = new BarDataSet(entries, "BarDataSet");
    BarData data = new BarData(set);
    barChart.setData(data);
}

private List<BarEntry> generateBarEntries() {
    List<BarEntry> entries = new ArrayList<>();
    for (int i = 0; i < timeValues.size(); i++) {
        float x = timeValues.get(i);
        float y = areaValues.get(i);
        entries.add(new BarEntry(x, y));
    }
    return entries;
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u data\u报告);
条形图条形图=(条形图)findViewById(R.id.BarChart);
列表条目=generateBarEntries();
BarDataSet=新的BarDataSet(条目,“BarDataSet”);
BarData数据=新的BarData(集合);
条形图.设置数据(数据);
}
私有列表generateBarEntries(){
列表项=新的ArrayList();
对于(int i=0;i
timeValues是一个以秒为单位的ArrayList,例如[3,9,21,26,33],areaValues也是一个与timeValues大小相同的ArrayList,目前每个值为30(即[30,30,30,30,30])。

要做到这一点,没有简单的方法。您必须在MPAndroidChart中挖掘条形图源代码,并找到名为BarBuffer的类。有一个名为addBar()的方法。在那里你可以改变酒吧宽度。在我的例子中,我仍然有24个独立的条,但是如果你改变宽度,你可以使它看起来像大的块

protected void addBar(float left, float top, float right, float bottom) {

    buffer[index++] = left;
    buffer[index++] = top;
    buffer[index++] = right;
    buffer[index++] = bottom;
}

好吧,我知道怎么做了。我没有创建条形图,而是创建了一个带有水平线的折线图,并填充了每条线下面的区域

LineChart timeChart = (LineChart) findViewById(R.id.timeChart);
List<ILineDataSet> dataSets = generateLineData();
LineData data = new LineData(dataSets);
timeChart.setData(data);
timeChart.invalidate();

private List<ILineDataSet> generateLineData() {
    List<ILineDataSet> dataSets = new ArrayList<>();
    for (int i = 0; i < areaValues.size(); i++) {
        List<Entry> barPoints = new ArrayList<>();
        Entry barPoint1;
        Entry barPoint2;
        LineDataSet dataSet;
        if (areaValues.get(i) >= 0) {
            barPoint1 = new Entry(timeValues.get(i), areaValues.get(i));
            barPoint2 = new Entry(timeValues.get(i+1), areaValues.get(i));
            barPoints.add(barPoint1);
            barPoints.add(barPoint2);
            dataSet = new LineDataSet(barPoints, "");
            dataSet.setColor(getResources().getColor(R.color.green));
            dataSet.setFillDrawable(ContextCompat.getDrawable(this, R.color.green));
        }
        dataSet.setDrawCircles(false);
        dataSet.setDrawFilled(true);
        dataSet.setDrawValues(false);
        dataSets.add(dataSet);
    }
    return dataSets;
}
LineChart timeChart=(LineChart)findviewbyd(R.id.timeChart);
列表数据集=generateLineData();
LineData数据=新的LineData(数据集);
时间图表。设置数据(数据);
timeChart.invalidate();
私有列表生成器数据(){
列表数据集=新的ArrayList();
对于(int i=0;i=0){
barPoint1=新条目(timeValues.get(i)、areaValues.get(i));
barPoint2=新条目(timeValues.get(i+1)、areaValues.get(i));
barPoints.add(barPoint1);
barPoints.add(barPoint2);
数据集=新的线数据集(barPoints,“”);
setColor(getResources().getColor(R.color.green));
setFillDrawable(ContextCompat.getDrawable(this,R.color.green));
}
dataSet.setDrawCircles(false);
dataSet.setDrawFilled(true);
dataSet.setDrawValues(false);
添加(数据集);
}
返回数据集;
}

工作非常出色。

请发布您迄今为止尝试过的代码。@petryuno1请参阅编辑的postCan您可以让我知道您的区域值和时间值的示例吗?@RahulSharma区域值只是为了我的目的随机生成的数字。时间值只需要每次递增,并且时间值应该总是比区域值多出一个条目。示例条目可以是:timeValues=[0,12,15,19,33]areaValues=[20,9,12,16]