0

この質問は、私の以前の疑問の続きです

今、ゲージビューを作ろうとしています。スケールを描いていますが、位置合わせが正しくなく、問題を把握できません。これが私のコードです:

 protected void onDraw(Canvas canvas) {

                                    super.onDraw(canvas);

                                    w= canvas.getWidth();
                                    h=canvas.getHeight();
                                    DrawRange(canvas,innerRadius,outerRadius);
                            }

ここで innerRadius = 250; 外半径 = 300;

 private void DrawRange(Canvas canvas,int r,int R) {
                                RectF rect = new RectF(canvas.getWidth()/2- r, canvas.getHeight()/2-r, canvas.getWidth()/2+r, canvas.getHeight()/2+r);
                                RectF rect1 = new RectF(canvas.getWidth()/2- R, canvas.getHeight()/2-R, canvas.getWidth()/2+R, canvas.getHeight()/2+R);

                                Paint scalePaint = new Paint();
                                scalePaint.setStyle(Paint.Style.STROKE);
                                scalePaint.setColor(0x9f004d0f);
                                scalePaint.setStrokeWidth(2);
                                scalePaint.setAntiAlias(true);

                                scalePaint.setTextSize(35.0f);
                                scalePaint.setTypeface(Typeface.SANS_SERIF);
                                scalePaint.setTextScaleX(0.4f);
                                scalePaint.setTextAlign(Paint.Align.CENTER);
                                canvas.drawOval(rect1, scalePaint);
                                canvas.drawOval(rect, scalePaint);

                                canvas.save(Canvas.CLIP_SAVE_FLAG);
                                int xc = 0;
                                for (int i = 0; i < totalNicks; i++) {

                                    float y1 = 330;
                                    float y2 = y1 + 5;

                                    if (i % 5 == 0) {
                                            canvas.drawText(""+xc, r-15, y2 , scalePaint);



                                            xc+=5;
                                    }else{
                                        canvas.drawLine(r, y1, r, y2, scalePaint);
                                    }

                                    canvas.rotate(degreesPerNick, w/2, h/2);

                                }
                                canvas.restore();

                            }

ここに画像の説明を入力

4

1 に答える 1

1

テキストとダッシュを間違った場所に描いているのだろうか。重要な基準点は円の中心です。

int cX = canvas.getWidth()/2;
int cY = canvas.getHeight()/2;

もう 1 つの重要な基準は、2 つの半径の違いです。

int deltaR = R - r;

ダッシュとテキストは常に 12 時の位置に描画されます。たとえば、内側の円の 20% 上から外側の円の 1/3 までの位置です。

int dashInnerY = cY - r - deltaR/5; // 20% of the way between inner and outer radii
int dashOuterY = cY - R + deltaR/3; // 1/3 of the way between outer and inner radii

次に、ダッシュをレンダリングします。

canvas.drawLine(cX, dashInnerY, cX, dashOuterY, scalePaint);

そして番号:

canvas.drawText(""+xc, cX, dashInnerY, scalePaint);
于 2013-08-19T14:13:01.237 に答える