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);
}
4

1 に答える 1

1

中心から接点まで長方形を描いていると思いますか?

Canvas.save/restoreを見てください。いくつかの擬似コード:

canvas.save()

canvas.rotate(angleOfRectangle)

canvas.drawRectangle(size)

canvas.restore()

アイデアは、現在のキャンバスの状態を保存し、キャンバス全体を回転させ、長方形を描画してから、キャンバスの状態を復元して「回転を忘れる」ことです。

[編集]

訂正してくれたマットに感謝します。

それが役に立てば幸い...

于 2012-06-06T07:29:05.197 に答える