0
votes

I making a dynamic bar graph demo, I am redrawing next bar on every click. But the problem is that

  • Bar is adding from right.
  • Bar size keeps on contracting on new bar addition.

I have to make a bar which adds from left with fix bar width.

Here is what happening with screen shots On every click bar size changes and adding from right

CODE :

dataset = new XYMultipleSeriesDataset();

    series = new XYSeries("data");

    dataset.addSeries(series);

    /*
     * for (int i = 0; i < 20; i++) { series.add(0, 0); }
     */

    // Now we create the renderer
    renderer = new XYSeriesRenderer();
    renderer.setLineWidth(1);
    renderer.setColor(Color.RED);
    renderer.setChartValuesSpacing(1);
    // Include low and max value
    // we add point markers
    renderer.setPointStyle(PointStyle.CIRCLE);
    renderer.setPointStrokeWidth(.1f);
    renderer.setShowLegendItem(false);

    mRenderer = new XYMultipleSeriesRenderer();
    mRenderer.addSeriesRenderer(renderer);
    mRenderer.setBackgroundColor(Color.argb(0x00, 0xff, 0xff, 0xff));

    // We want to avoid black border
    mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00)); // transparent
    mRenderer.setAxesColor(Color.argb(0x00, 0xff, 0x00, 0x00));
    mRenderer.setGridColor(Color.argb(0x00, 0xff, 0x00, 0x00)); // margins

    // margins
    // Disable Pan on two axis
    mRenderer.setPanEnabled(false, false);
    mRenderer.setYAxisMax(20);
    mRenderer.setYAxisMin(0);

    mRenderer.setShowGrid(false); // we show the grid
    mRenderer.clearYTextLabels();
    mRenderer.setShowGridY(false);
    mRenderer.setApplyBackgroundColor(true);
    mRenderer.setBackgroundColor(Color.argb(0x00, 0xff, 0xff, 0xff));
    mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0xff, 0xff));
    mRenderer.setPanEnabled(false, false);
    mRenderer.setZoomEnabled(false, false);
    mRenderer.setShowLabels(false);
    mRenderer.setXLabelsPadding(2);
    mRenderer.setPointSize(1);
    mRenderer.setBarSpacing(.2);

    mChartView = ChartFactory.getBarChartView(this, dataset, mRenderer,
            BarChart.Type.DEFAULT);

    graphLayout.addView(mChartView, 0);

    b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            generate();

        }
    });

}

protected void generate() {
    int r = randInt(1, 20);
    // dataset.addSeries(series);

    series.add(0, r);

    mChartView.repaint();
}
1

1 Answers

0
votes

set the multiRenderer.setXAxisMax(maxX); value

maxX = to the number of series in the chart . . if you want to make it not contracting try to set the maxX value that will only allow the chart to show 25% of all the series in chart my sample code below :

multiRenderer.setXAxisMax(maxX * .25);