35

私は次のカスタムビューを持っています:

代替テキスト

これは、CanvasのdrawArc()方法を使用して達成しました。ただし、このdrawArc()方法では、円弧の内側の半径を制限することはできません。

私が欲しいのはこのようなものです:

代替テキスト

外輪だけが残っているところ。

必要なのはdrawArc()、円弧の内半径を設定できる関数です。誰かがそれを行う方法を考えていますか?

(ところで、透明にする必要があるため、内側の領域を上塗りしても機能しません。Color.TRANSPARENT赤と青の円錐をペイントした後に内側の円をペイントしても、古い色は削除されません。透明な別のレイヤーを上に配置するだけです。そしてそれを通して私はまだ赤と青を見ることができます)

4

5 に答える 5

75

あなたはこれを行うことができます:

    Paint paint = new Paint();
    final RectF rect = new RectF();
    //Example values
    rect.set(mWidth/2- mRadius, mHeight/2 - mRadius, mWidth/2 + mRadius, mHeight/2 + mRadius); 
    paint.setColor(Color.GREEN);
    paint.setStrokeWidth(20);
    paint.setAntiAlias(true);
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setStyle(Paint.Style.STROKE);
    canvas.drawArc(rect, -90, 360, false, paint);

キーは にありpaint.setStyle(Paint.Style.STROKE);、setStrokeWidth で定義したストロークで円弧の中心をトリミングします (例では、半径 mRadius で厚さ 20px の円弧を描画します)。

それが役に立てば幸い!

于 2011-04-01T14:54:31.853 に答える
33

「Clear」と呼ばれる PorterDuff xfermode を使用して、内側の領域をペイントできます。これにより、ピクセルが消去されます。

于 2010-10-06T17:04:39.883 に答える