Canvas.drawLines () создает разрывы между строками - PullRequest
1 голос
/ 25 марта 2019

Я использую drawLines() в моем наборе данных точек.Он отлично рисуется, когда начинается с (0,0), но когда набор данных начинается с другой точки, он создает некоторые пробелы.

Здесь график начинается с (0, 0) (добавлена ​​небольшая линия слева внизу):

enter image description here

Здесь он начинается сиз (83, 56) и производит разрыв:

enter image description here

Что я пробовал:

  1. Установка вкл / выкл сглаживания.
  2. Различные наборы данных (все они создают разрыв в верхней точке y, если в (0, 0) ничего не нарисовано.
  3. Я читал о попытке drawPath(), но так как мне нужнорисовать много линий было сказано, что это не так эффективно, как drawLines().

Вот несколько фрагментов из моего проекта:

Мой набор данных:
x = { 0,12,83,84,84,121,121,128,128,151,151,173,173,203,203,217,217,224,224,229,229,253,253,294,294,305,305,331,331,355,355,364,364,409,409,411,411,416,416,431,431,448,448,497,497,504,504,508,508,536,536,582,582,586,586,630,630,646,646,660,660,689,689,728,728,761,761,768,768,798,798,822,822,860,860,894,894,908,908,952,952,996,996,1039,1039,1085,1085,1085,1085,1099,1099,1119,1119,1133,1133,1169 }

y = { 0,12,56,115,115,220,220,232,232,170,170,350,350,117,117,157,157,205,205,290,290,184,184,127,127,181,181,231,231,210,210,278,278,142,142,120,120,299,299,29,29,290,290,50,50,258,258,127,127,203,203,168,168,27,27,27,27,83,83,116,116,228,228,295,295,62,62,299,299,121,121,216,216,266,266,164,164,234,234,116,116,182,182,130,130,208,208,218,218,202,202,85,85,59,59,114 }

Как настроить Paint:

private void init() {
    chartPaint = new Paint();
    chartPaint.setStyle(Paint.Style.STROKE);
    chartPaint.setStrokeWidth(4);
    chartPaint.setColor(color);
}

My onDraw ():Массив

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();

    // let chart start from the most left without gaps
    canvas.translate(0, viewHeight);

    // TODO: find place to move calcs outside onDraw()
    final float xScale = (float)  viewWidth / (Util.getMax(x) - Util.getMin(x));
    final float yScale = (float) -viewHeight / (Util.getMax(y) - Util.getMin(y));

    valuesScaled = new float[values.length];

    for (int i = 0; i < values.length; i++) {
        valuesScaled[i] = (i%2==0) ? values[i] * xScale : values[i] * yScale;
    }

    canvas.drawLines(valuesScaled, chartPaint);
    canvas.restore();
}

values - это место, где поочередно хранятся массивы x и y, т.е. первые 4 элемента values: {x[0], y[0], x[1], y[1], ...}

viewWidth и viewHeight взяты из onSizeChange().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...