首页 文章

在Android画布上绘制有角度的矩形/弧形

提问于
浏览
1

我正在尝试修改Android设备的操纵杆组件 . 目前,该组件能够跟踪手指的x和y位置,并在那里绘制一个小圆圈 . 现在我想做的是从中心到手指的x和y位置绘制一个矩形或弧形 .

据我所知,矩形只有顶部,左侧,右侧和底部值,只允许我水平或垂直绘制矩形 . 如果有人知道另一种方式来绘制这将是太棒了 .

我已经设法使用canvas.drawLine得到一个直的矩形但是我现在想要使用drawArc函数使矩形弯曲,但这需要一个RectF参数 .

我目前使用的代码是:

@Override
protected void onDraw(Canvas canvas) {

    int centerX = (getWidth())/2;
    int centerY = (getHeight())/2;
    Paint p = new Paint();
    p.setColor(buttonColor);

    RadialGradient gradient = new RadialGradient( centerX, centerY, joystickRadius,
    backgroundColor,circleColor, android.graphics.Shader.TileMode.CLAMP);

    //draw an outer circle
    p.setDither(true);
    p.setShader(gradient);
    canvas.drawCircle( (int) centerX, (int) centerY, joystickRadius, p);


    p.setShader(null);
    p.setColor(buttonColor);
    p.setStyle(Paint.Style.FILL);

    //draw the joystick thumbpad
    canvas.drawCircle(x, y, buttonRadius, p);

    // draw a line from the centre of outer circle to the center of the 
    // thumbpad. I want this to be a curved rectangle instead.
    canvas.drawLine( centerX, centerY, x, y, p);
}

1 回答

  • 1

    我假设您正在尝试从中心到接触点绘制一个矩形?

    看看Canvas.save/restore . 一些伪代码:

    canvas.save()
    
    canvas.rotate(angleOfRectangle)
    
    canvas.drawRectangle(size)
    
    canvas.restore()
    

    我们的想法是保存当前的画布状态,旋转整个画布,绘制矩形,然后将画布状态恢复为“忘记”旋转“ .

    [编辑]

    感谢Matt的纠正 .

    希望能帮助到你...

相关问题