DrawArc对图像,定位问题

时间:2017-01-16 11:22:37

标签: android drawing rect

我有一个规格的抽屉,我试着画一条线。 (固定位置,不是固定值)

不幸的是,我没有任何绘画经验。 (我觉得很难理解)

目前它看起来像这样: https://i.stack.imgur.com/5tkXEl.png

正如您所看到的,它没有正确定位,我非常害怕在其他设备上查看它。

代码(类扩展视图):

private void init(Context context) {
    bounds = new Rect();
    gaugeBackground = ContextCompat.getDrawable(context, R.drawable.gauge);
    arcPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    arcPaint.setColor(Color.RED);
    arcPaint.setStyle(Paint.Style.STROKE);
    arcPaint.setStrokeWidth(7f);
}

protected void onDraw(Canvas canvas) {
    canvas.getClipBounds(bounds);
    gaugeBackground.setBounds(bounds);
    gaugeBackground.draw(canvas);

    float padding = 5;
    float size = getWidth() < getHeight() ? getWidth() : getHeight();
    float width = size - (2 * padding);
    float height = size - (2 * padding);
    float radius = (width < height ? width /2 : height /2);

    float rectLeft = (width /2) - radius + padding;
    float rectTop = (getHeight() /2) - radius + padding;
    float rectRight = (getWidth() /2) - radius + padding + width;
    float rectBottom = (getHeight() /2) - radius + padding + height;

    RectF mRect = new RectF(rectLeft, rectTop, rectRight, rectBottom);
    canvas.drawArc(mRect, 119f, 300f, false, arcPaint);
}

有人可以提供有用的信息吗?我希望我终于得到了整个RectF / Drawing的东西..

1 个答案:

答案 0 :(得分:1)

哦,我的实施存在多个问题。

主要问题:背景图像被“扭曲”,因此测量仪不是真正的圆形。

另外:代码有点乱,而且过于复杂。

我在这里提出这个问题 - 未来可能对某人有帮助。

protected void onDraw(Canvas canvas) {
    canvas.getClipBounds(bounds);+
    //0.86 == Aspect Ratio of the Background
    gaugeBackground.setBounds(0, 0, bounds.right, (int) Math.round(bounds.bottom * 0.86));
    gaugeBackground.draw(canvas);

    float padding = 3;
    float size = getWidth() < getHeight() ? getWidth() : getHeight();
    float width = size - (2 * padding);
    float height = size - (2 * padding);

    RectF mRect = new RectF(padding, padding, width, height);
    canvas.drawArc(mRect, 134f, 271f, false, arcPaint);
}