如何在圆弧中绘制一条直线,将中心与圆周连接起来

时间:2012-12-14 13:37:30

标签: android android-canvas

我有一个自定义视图,我画一个弧。 现在我还需要绘制一条连接中心和圆周的线 并且应该正好在弧的中间。

现在我知道android画布中绘制线的代码非常简单

但它不涉及角度,并且弧总是使用角度来绘制自己。

所以我可以在与弧相同的方向画线吗?

我在这里清楚还是需要解释更多?

请帮忙。

2 个答案:

答案 0 :(得分:10)

计算起点和终点。

private class MView extends View {
    private Paint mPaint;
    private RectF mRect;
    private int mCenterX = 150;
    private int mCenterY = 150;

    public MView(Context context) {
        super(context);
        mPaint = new Paint();
        mPaint.setColor(Color.BLACK);
        mPaint.setStyle(Style.STROKE);
        mRect = new RectF(0, 0, mCenterX * 2, mCenterY * 2);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        float startAngle = 30;
        float sweepAngle = 60;

        canvas.drawArc(mRect, startAngle, sweepAngle, true, mPaint);
        float startX = mCenterX;
        float startY = mCenterY;
        float radius = mCenterX;
        float angle = (float) ((startAngle + sweepAngle / 2) * Math.PI / 180);
        float stopX = (float) (startX + radius * Math.cos(angle));
        float stopY = (float) (startY + radius * Math.sin(angle));

        canvas.drawLine(startX, startY, stopX, stopY, mPaint);
    }

}

答案 1 :(得分:0)

以下是基于以上答案的最终结果:

    for (int i = 0; i < numOfDividing; i++) {
        angle = i * (360 / numOfDividing);

        Point aPoint = new Point(
                (int) (x0 + (radius) * Math.cos(Math.toRadians(angle))),
                (int) (y0 + (radius) * Math.sin(Math.toRadians(angle)))
        );
        //Timber.d("Point %d : %d, %d", i, aPoint.x, aPoint.y);
        points.add(aPoint);
    }