0

这个问题延续了我之前的疑问

现在我正在尝试制作一个 guage 视图。我正在绘制比例尺,但对齐不正确,我无法找出问题所在。这是我的代码:

 protected void onDraw(Canvas canvas) {

                                    super.onDraw(canvas);

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

这里内半径=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;

另一个关键参考是两个半径之间的差异:

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 回答