Я пытаюсь создать базовый график для своего приложения, но у меня небольшая проблема с ним. В настоящее время происходит то, что мой график генерируется, как я надеюсь, но когда я иду на график своих точек внутри него, точки всегда «отключены на 1», в частности, моя точка, которая должна сидеть в пятне 15 на график отображается в 14. То же самое верно для всех остальных точек моего графика, так как они также отображаются на 1 ниже, чем они должны быть. Я попытался добавить 1 к конду, но это, похоже, не изменило ни одной из фактических точек по мере их отображения, и просто сдвинуло мои метки на оси y, чтобы начать выше. Ниже приведен код, который, как я думаю, несет ответственность, но если требуется больше, просто спросите, и я опубликую, что спросили.Точки не выстраиваются в линию
Примечание: Это относится к назначению класса, целью которого является создание 2-й графики, поэтому я не могу использовать класс графического отображения, хотя знаю, что это гораздо проще.
код ниже:
public class GraphicsView extends View {
ArrayList<Point> points = new ArrayList<Point>();
Path xPath = new Path();
Path yPath = new Path();
Path zPath = new Path();
Path drawGrid = new Path();
...
Integer xAxis;
Integer yAxis;
@Override
protected void onDraw(Canvas canvas) {
Integer counter = points.size();
Integer xCord;
super.onDraw(canvas);
yAxis = this.getHeight();
xAxis = this.getWidth();
canvas.drawColor(R.color.Background);
<Setting different paint objects to the right colors here>
xPath.moveTo(20, yAxis-20);
yPath.moveTo(20, yAxis-20);
zPath.moveTo(20, yAxis-20);
drawGrid.moveTo(22, yAxis-20);
drawGrid.lineTo(22, 0);
canvas.drawPath(drawGrid,grid);
drawGrid.moveTo(22, yAxis-20);
drawGrid.lineTo(xAxis, yAxis-22);
canvas.drawPath(drawGrid,grid);
//Left right Axis (X)
for (Integer ctr = counter; ctr > 0; ctr--) {
Integer value = counter- ctr + 1;
canvas.drawText(value.toString(), (xAxis-20)/ctr,yAxis-5, grid);
}
//Up down Axis (Y)
for (Integer ctr = 1; ctr < 22; ctr++) {
Integer value = ctr - 1;
canvas.drawText(value.toString(), 5, scale(yAxis, ctr), grid);
}
for (Point point : points)
{
xCord = ((xAxis -20)/counter);
xPath.lineTo(xCord, scale(yAxis,point.getxCord()));
xPath.addCircle(xCord, scale(yAxis, point.getxCord()), 2, Direction.CW);
yPath.lineTo(xCord, scale(yAxis, point.getyCord()));
yPath.addCircle(xCord, scale(yAxis,point.getyCord()), 2, Direction.CW);
zPath.lineTo(xCord, scale(yAxis, point.getzCord()));
zPath.addCircle(xCord, scale(yAxis, point.getzCord()), 2, Direction.CW);
canvas.drawPath(xPath, xPaint);
canvas.drawPath(yPath, yPaint);
canvas.drawPath(zPath, zPaint);
counter -= 1;
}
}
private Integer scale(Integer Axis, Integer cord) {
Integer point = 0;
point = (Axis - (((Axis-20)/21)) * cord);
return point;
}
}
Повторим, что я ищу способ решить это так, что, когда значение установлено на 15, он показывает его как по 15 на ось y. В настоящее время он показывает, что он находится рядом с 14.
Да, когда код проходил через него, он проходил как необходимое значение, он просто не отображался в правой точке. Благодаря этому вам удалось добиться успеха, поэтому спасибо за это. – Gyhth