1

アプリケーションの基本的なグラフを作成しようとしていますが、小さな問題があります。現在、グラフは期待どおりに生成されていますが、グラフ内のポイントをグラフにすると、ポイントは常に「1 ずれています」。具体的には、ポイントはグラフは 14 に表示されます。グラフの他のすべてのポイントについても同じことが言えます。これらのポイントも本来よりも 1 低く表示されているためです。cond に 1 を追加しようとしましたが、表示されている実際のポイントは変更されていないようで、単にラベルを 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の横にあることを示しています。

4

2 に答える 2

1

電話をかけるときはいつでも、それpoint.getyCord()に追加し+ 1てください。

point.getyCord() + 1

そして、あなたがay値を設定しているとき、それが実際に望ましい値として入っていることを確認できますか?

于 2013-03-09T03:48:44.650 に答える
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()、1つオフセットしません。

これを修正する2つの方法:

scale()を変更してオフセットします

private Integer scale(Integer Axis, Integer cord) {
    Integer point = 0;
    point = (Axis - (((Axis-20)/21)) * (cord + 1));
    return point;
}

このメソッドを使用する場合は、文字列にもvalue使用できるため、軸の描画時に使用した変数も削除する必要があります。ctr

  • 毎回y座標をオフセットします

Colin Gillespieが言ったように、に1を加えるだけですpoint.getCord()


私は最初の方法を好みます。なぜなら、それはよりクリーンであり、その関数では一度だけオフセットする必要があるからです。2番目の方法では、座標をスケーリングに渡すときはいつでも、それをオフセットすることを忘れないでください。

于 2013-03-09T04:23:21.627 に答える