【问题标题】:MPAndroid Chart - LimitLine and Cubic Bezier drawing - curved line exceeds min-max limit linesMPAndroidChart - 限制线和三次贝塞尔绘图 - 曲线超过最小-最大限制线
【发布时间】:2018-07-30 09:23:38
【问题描述】:

屏幕截图显示了相同数据使用和不使用三次贝塞尔模式的图表。正如您所看到的,当启用三次贝塞尔模式时,这条线超出了我需要在图表中显示为 LimitLine 的最小值和最大值,它看起来非常糟糕。

有没有办法解决这个问题?

private void setData(int count, float range) {

    ArrayList<Entry> yVals = new ArrayList<Entry>();

    float max = - Float.MAX_VALUE, min = Float.MAX_VALUE;
    for (int i = 0; i < count; i++) {
        float mult = (range + 1);
        float val = (float) (Math.random() * mult) + 20;// + (float)
                                                       // ((mult *
                                                       // 0.1) / 10);
        yVals.add(new Entry(i, val));

        if(val<min){
            min = val;
        }
        if(val>max){
            max = val;
        }

    }

    LineDataSet set1;

    if (mChart.getData() != null &&
            mChart.getData().getDataSetCount() > 0) {
        set1 = (LineDataSet)mChart.getData().getDataSetByIndex(0);
        set1.setValues(yVals);
        mChart.getData().notifyDataChanged();
        mChart.notifyDataSetChanged();
    } else {
        // create a dataset and give it a type
        set1 = new LineDataSet(yVals, "DataSet 1");

        set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        set1.setCubicIntensity(0.2f);
        //set1.setDrawFilled(true);
        set1.setDrawCircles(false);
        set1.setLineWidth(1.8f);
        set1.setCircleRadius(4f);
        set1.setCircleColor(Color.BLACK);
        set1.setHighLightColor(Color.rgb(244, 117, 117));
        set1.setColor(Color.parseColor("#16315d"));
        set1.setFillColor(Color.RED);
        GradientDrawable d = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{Color.BLACK, Color.RED});
        set1.setFillAlpha(220);
        set1.setFillDrawable(d);


        set1.setFillAlpha(100);
        set1.setDrawHorizontalHighlightIndicator(false);
        set1.setFillFormatter(new IFillFormatter() {
            @Override
            public float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataProvider) {
                return -10;
            }
        });

        // create a data object with the datasets
        LineData data = new LineData(set1);
        data.setValueTypeface(mTfLight);
        data.setValueTextSize(9f);
        data.setDrawValues(false);

        // set data
        mChart.setData(data);
    }

    YAxis yAxis = mChart.getAxisLeft();
    yAxis.removeAllLimitLines();

    LimitLine lMin = new LimitLine(min, Float.toString(min));
    lMin.setLabelPosition(LimitLine.LimitLabelPosition.LEFT_BOTTOM);

    LimitLine lMax = new LimitLine(max, Float.toString(max));
    lMax.setLabelPosition(LimitLine.LimitLabelPosition.LEFT_TOP);

    yAxis.addLimitLine(lMin);
    yAxis.addLimitLine(lMax);

}

【问题讨论】:

  • 尝试使用HORIZONTAL_BEZIER
  • 是的,我实际上已经解决了一段时间,只是忘记了这里的问题。我会发布答案谢谢你的评论

标签: android charts mpandroidchart cubic-bezier


【解决方案1】:

对于未来的访客,答案是不要打电话:

lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);

改为使用:

lineDataSet.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2011-03-10
    • 2012-04-21
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多