在画布的中心绘制弧形

时间:2014-02-21 03:29:35

标签: canvas android-canvas

这就是我绘制弧线的方式......

第一张图片显示目前它在画布上的绘制总是LEFT TOP角落我想要达到 它的任何一个角落的画布示例第二张图片RIGHT | BOTTOM

Current what I want

public void onDraw(Canvas canvas) {

    if(first == null)
        first = new RectF();
    if(second == null)
        second = new RectF();

    if(p == null)
        p = new Path();
    canvas.drawColor(Color.TRANSPARENT);
    paint.reset();
    paint.setAntiAlias(true);
    float _X, _Y, radius, innerRadius;
    path.reset();

    float currentAngle =90;
    float currentSweep;
    float padding = 0;


    _X = 150;//getWidth();
    _Y = 150;//getHeight();

    if (_X < _Y) {
        radius = _X;
    } else {
        radius = _Y;
    }
    radius -= padding;
    innerRadius = radius - thickness;

    first.set(_X - radius, _Y - radius, _X + radius, _Y + radius);
    second.set(_X - innerRadius, _Y - innerRadius, _X + innerRadius, _Y + innerRadius);

    paint.setColor(Color.GREEN);
    currentSweep = 270;

    p.arcTo(first, currentAngle + padding, currentSweep - padding);
    p.arcTo(second, (currentAngle + padding) + (currentSweep - padding), -(currentSweep - padding));

    canvas.drawPath(p, paint);
    p.close();

}

但它总是在LEFT TOP角落中绘制,我如何将其更改为CENTER和画布的任何角落。我希望能够灵活地在Canvas中的任何位置更改弧的位置。

请帮忙。

1 个答案:

答案 0 :(得分:1)

更改_X&amp; _Y变量。

我不明白为什么你需要这个

if (_X < _Y) {
    radius = _X;
} else {
    radius = _Y;
}

但是如果您只需要半径恒定的弧,则不需要上面的代码。

然后,您可以使用

之类的内容轻松定位
//For bottom right
_X = getWidth() - radius;
_Y = getHeight() - radius;

//For top right
_X = getWidth() - radius;
_Y = radius;

//For bottom left
_X = radius;
_Y = getHeight() - radius;

//For center
_X = getWidth() / 2;
_Y = getHeight() / 2;