我正在尝试为我的应用程序创建一个基本图形,但我遇到了一个小问题。现在,发生的事情是我的图表是按照我希望的方式生成的,但是当我在其中绘制我的点数时,点数总是“偏离1”,具体来说,我的观点应该位于第15点。图形显示在14.对于我的图表中的所有其他点也是如此,因为它们也显示为低于应有的1。我试图将1添加到cond,但这似乎没有改变任何实际点,因为它们被显示,并简单地移动我的标签在y轴上开始更高。下面是我认为负责的代码,但如果需要更多,只需询问,我将发布所要求的内容。
注意:这是一个类赋值,其目的是生成2D图形,所以我不能专门使用图形类,虽然我知道这样做要容易得多。
代码如下:
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时,它会显示为沿y轴上的15。目前,它显示它在14旁边。
答案 0 :(得分:1)
每当您致电point.getyCord()
时,只需向其添加+ 1
。
point.getyCord() + 1
您可以确认,当您设置y值时,它实际上是作为所需的值。
答案 1 :(得分:1)
你的问题在于:
for (Integer ctr = 1; ctr < 22; ctr++) {
Integer value = ctr - 1;
canvas.drawText(value.toString(), 5, scale(yAxis, ctr), grid);
您的Y轴以标签0
开头,但从1
开始,它位于value = ctr - 1
位置。稍后使用scale()
函数时,不要将其偏移一。
解决此问题的两种方法:
将scale()修改为偏移量
private Integer scale(Integer Axis, Integer cord) {
Integer point = 0;
point = (Axis - (((Axis-20)/21)) * (cord + 1));
return point;
}
如果使用此方法,您还应该删除绘制轴时使用的value
变量,因为您也可以使用ctr
作为字符串。
正如Colin Gillespie所说,你可以在point.getCord()
添加1。
我更喜欢第一种方法,因为它更干净,而且你只需要在该函数中将其偏移一次。使用第二种方法,每当你将坐标传递给比例时,你都必须记住要抵消它。