Android:MPAndroidChart第一个Bar无法正常显示

时间:2017-09-17 10:15:18

标签: android scroll mpandroidchart

我正在使用MPAndroidChart绘制scatBarChart。代码如下:

代码:

public void setupScatteredBarChart(ArrayList<String> x, ArrayList<String> y1, ArrayList<String> y2 )
    {
        int maxYvalue = 0;
        final String[] x_name = new String[x.size()];
        for (int j = 0;  j <x.size(); j++)
        {
            String[] temp = x.get(j).split("-");
            x_name[j] = temp[0] + "/" + temp[1];
        }

        ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();

        for (int i = 0; i < x_name.length; i++)
        {
            float val1 = Float.parseFloat(y1.get(i));
            float val2 = Float.parseFloat(y2.get(i));

            yVals1.add(new BarEntry(i, new float[]{val1, val2},getResources().getDrawable(R.drawable.ic_launcher)));

            float val_total = val1 + val2;
            int I = (int) Math.ceil(val_total);
            if (maxYvalue < I)
            {
                maxYvalue = I;
            }
        }

        chart_scattered = (BarChart) findViewById(R.id.chart_scattered);
        chart_scattered.setOnChartValueSelectedListener(Stat.this);
        chart_scattered.getDescription().setEnabled(false);

        chart_scattered.setMaxVisibleValueCount(40); // if more than 40 entries are displayed in the chart, no values will be drawn
        chart_scattered.setPinchZoom(false);      // scaling can now only be done on x- and y-axis separately
        chart_scattered.setDrawGridBackground(false);
        chart_scattered.setDrawBarShadow(false);
        chart_scattered.setDrawValueAboveBar(false);
        chart_scattered.setHighlightFullBarEnabled(false);
        chart_scattered.setDoubleTapToZoomEnabled(false);
        chart_scattered.setTouchEnabled(false);
        chart_scattered.setFitBars(true);
        chart_scattered.animateXY(800, 800);
        chart_scattered.getAxisRight().setEnabled(false);
        chart_scattered.getXAxis().setAxisMinimum(-0.5f); // adjust for showing first bar properly

        // Left Y axis
        YAxis leftAxis = chart_scattered.getAxisLeft();       // change the position of the y-labels
        leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)

        chart_scattered.getAxisLeft().setLabelCount(maxYvalue + 1, true);
        chart_scattered.getAxisLeft().setAxisMinValue(0f);
        chart_scattered.getAxisLeft().setValueFormatter(new MyYAxisValueFormatter());

        // Bottom X axis
        XAxis xLabels = chart_scattered.getXAxis();

        xLabels.setPosition(XAxis.XAxisPosition.BOTTOM);
        xLabels.setAxisMinimum(0f);
        xLabels.setGranularity(1f);
        xLabels.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return x_name[(int) value % x_name.length];
            }
        });

        Legend l = chart_scattered.getLegend();
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        l.setDrawInside(false);
        l.setFormSize(6f);
        l.setFormToTextSpace(4f);
        l.setXEntrySpace(6f);

        BarDataSet set1;

        if (chart_scattered.getData() != null && chart_scattered.getData().getDataSetCount() > 0)
        {
            set1 = (BarDataSet) chart_scattered.getData().getDataSetByIndex(0);
            set1.setValues(yVals1);
            chart_scattered.getData().notifyDataChanged();
            chart_scattered.notifyDataSetChanged();
        }
        else
        {
            set1 = new BarDataSet(yVals1, "");
            set1.setDrawIcons(false);
            set1.setColors(getColors());
            set1.setStackLabels(new String[]{"A", "B"});

            ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
            dataSets.add(set1);

            BarData data = new BarData(dataSets);
            data.setValueTextColor(Color.WHITE);

            chart_scattered.setData(data);
        }
        chart_scattered.invalidate();
    }

屏幕截图:

enter image description here

问题:

  1. 第一个Bar怎么能正常显示?我已经研究了很多,并在代码中添加了以下内容,但仍未成功显示在上面的屏幕截图中。

    chart_scattered.getXAxis()setAxisMinimum(-0.5f);

    chart_scattered.setFitBars(真);

  2. 随着日期不断增加,是否可以设置最多7个条和更多,它必须水平滚动?

  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

问题1

从代码中删除此行

xLabels.setAxisMinimum(0f);

将解决您的问题。

问题2

要仅显示前7个栏,请使用此..

chart_scattered.setVisibleXRangeMaximum(7f);

但是这不允许用户水平滚动,如果要启用滚动,则必须从代码中删除此行

chart_scattered.setTouchEnabled(false);

我假设您使用了上述行,因此用户无法突出显示条形图。要保持这种行为,请使用此功能..

chart_scattered.setHighlightPerTapEnabled(false);