2

2 x 2、3 x 3、4 x 4 のようなドットを動的に生成したいアプリケーションがあります。 このような

今、次のようにコードを使用して動的にドットマトリックスを描画しています:

if(test.equals("galmenu2"))
            {
            canvas.drawCircle(wid/4,3*ht/8,3, mPaint);
            canvas.drawCircle(3*wid/4,3*ht/8,3, mPaint);
            canvas.drawCircle(3*wid/4,5*ht/8,3, mPaint);
            canvas.drawCircle(wid/4,5*ht/8,3, mPaint);
            }
            else if(test.equals("galmenu3"))
            {
                canvas.drawCircle(wid/4,3*ht/8,3, mPaint);
                canvas.drawCircle(wid/2,3*ht/8,3, mPaint);
                canvas.drawCircle(3*wid/4,3*ht/8,3, mPaint);
                canvas.drawCircle(wid/4,ht/2,3, mPaint);
                canvas.drawCircle(wid/2,ht/2,3, mPaint);
                canvas.drawCircle(3*wid/4,ht/2,3, mPaint);

                canvas.drawCircle(wid/4,5*ht/8,3, mPaint);
                canvas.drawCircle(wid/2,5*ht/8,3, mPaint);
                canvas.drawCircle(3*wid/4,5*ht/8,3, mPaint);

            }
            else if(test.equals("galmenu4"))
            {
                for(wid=1/8;wid<1;wid+=2/8)
                {
                for(ht=5/16;ht<3/4;ht+=1/8)
                {
                    canvas.drawCircle(wid,ht,3, mPaint);
                }
                }//this for loop crash the application 
            }

キャンバスの中心にドットを生成する式が必要です 助けてください 上記のコードは onDraw() メソッドに追加されます よろしくお願いします

4

1 に答える 1

4

nキャンバス上に円で描くnには、次を使用します。

// n is defined
for (int i=0; i<n; i++) {
    for (int j=0; j<n; j++) {
         canvas.drawCircle(((float)i +.5)/n*(float)width, ((float)j +.5)/n*(float)width, 3, mPaint);
     }
}

ここで何が起きてるの?n*n描画コマンドをループします。

  • (i+.5)/nの間の数値である で描画します。これは、座標があるカナウの幅のパーセンテージです。01
  • 幅を掛けて、実際のピクセル座標を取得します
  • 高さも同じようにします。
  • パーセンテージが整数として丸められないようにするために必要な (float) キャストに注意してください。
于 2012-05-19T09:25:09.320 に答える