Я использую drawLines()
в моем наборе данных точек.Он отлично рисуется, когда начинается с (0,0), но когда набор данных начинается с другой точки, он создает некоторые пробелы.
Здесь график начинается с (0, 0) (добавлена небольшая линия слева внизу):
![enter image description here](https://i.stack.imgur.com/3DSJb.png)
Здесь он начинается сиз (83, 56) и производит разрыв:
![enter image description here](https://i.stack.imgur.com/F0yEp.png)
Что я пробовал:
- Установка вкл / выкл сглаживания.
- Различные наборы данных (все они создают разрыв в верхней точке y, если в (0, 0) ничего не нарисовано.
- Я читал о попытке
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()
.