首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未对齐的点

未对齐的点
EN

Stack Overflow用户
提问于 2013-03-09 10:23:31
回答 2查看 72关注 0票数 1

我正在尝试为我的应用程序创建一个基本的图形,但我遇到了一个小问题。目前,我的图是按照我所希望的那样生成的,但是当我在图中绘制我的点时,这些点总是“差1",具体地说,我应该位于图中点15的点显示在14处。对于我的图中的所有其他点也是如此,因为它们也比应该显示的低1。我尝试将1加到cond上,但这似乎没有改变显示的任何实际点,只是简单地移动了y轴上的标签以开始更高的位置。下面是我认为是负责任的代码,但如果需要更多,只需询问,我将发布所询问的内容。

代码如下:

代码语言:javascript
复制
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;
     }
}

目前,它显示它在14旁边。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-09 11:48:45

无论何时调用point.getyCord(),只需添加一个+ 1即可。

代码语言:javascript
复制
point.getyCord() + 1

你能确认,当你设置一个y值时,它实际上是作为期望值。

票数 1
EN

Stack Overflow用户

发布于 2013-03-09 12:23:22

你的问题出在这里:

代码语言:javascript
复制
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()函数时,不会将其偏移1。

有两种方法可以解决这个问题:

为您的偏移量修改()

代码语言:javascript
复制
private Integer scale(Integer Axis, Integer cord) {
    Integer point = 0;
    point = (Axis - (((Axis-20)/21)) * (cord + 1));
    return point;
}

如果使用这种方法,还应该去掉绘制轴时使用的value变量,因为也可以对字符串使用ctr

  • Offset你的y坐标每个time

正如科林·吉莱斯皮所说,你可以在point.getCord()上加1。

我更喜欢第一种方法,因为它更干净,而且你只需要在那个函数中偏移它一次。使用第二种方法时,无论何时将坐标传递给scale,都必须记住对其进行偏移。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15306455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档