私は今、私は2点間の円弧を描きたいこのコード キャンバス上の2点間にアークを描画する方法は?
canvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint);
使用することで、この下の画像のように、これらの点の間に線を引くことができるよ、キャンバスに2点を持っています下の画像のように。
は、どのように私はこのように描くことができます。
私は今、私は2点間の円弧を描きたいこのコード キャンバス上の2点間にアークを描画する方法は?
canvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint);
使用することで、この下の画像のように、これらの点の間に線を引くことができるよ、キャンバスに2点を持っています下の画像のように。
は、どのように私はこのように描くことができます。
最後に、私はこのコードから解決策だ:startAngle
を計算するには
float radius = 20;
final RectF oval = new RectF();
oval.set(point1.x - radius, point1.y - radius, point1.x + radius, point1.y+ radius);
Path myPath = new Path();
myPath.arcTo(oval, startAngle, -(float) sweepAngle, true);
を、このコードを使用します。ここ
int startAngle = (int) (180/Math.PI * Math.atan2(point.y - point1.y, point.x - point1.x));
、point1
をアークの描画を開始したい場所を意味します。 sweepAngle
は、2本の線の間の角度を意味します。質問画像の青い点のような2点を使って計算しなければなりません。
sweeep_angleはどういう意味ですか? –
ここでsweep_angleは2つの線の間の角度を意味し、2つの点を使用して計算する必要があります。これは、Question画像の青い点のようなコーナー間の最短点です。 –
ありがとうございます! :) –
このような何か:
@Override
protected void onDraw(Canvas canvas) {
Paint p = new Paint();
RectF rectF = new RectF(50, 20, 100, 80);
p.setColor(Color.BLACK);
canvas.drawArc (rectF, 90, 45, true, p);
}
私はそれらの2点の間に弧を描画する必要があります –
開始角度と掃引角度を指定する必要があります。[docs here](http://developer.android.com/reference/android/graphics/Canvas.html) –
ポイント間の角度が動的に変化し、これらの点も。 –
私は少し違うことをしようとしていましたが、それはすべてスイープとスタートアングルを計算することです。
上から下に向かう円の進行を表す円を表示したかったのです。
だから私は0 ... 100から進捗値を持っていたと私は進歩が、私が使用しsweepAngleを計算するには100
ときに円を埋めるために上から下にアークスタートを見せたい:
int sweepAngle = (int) (360 * (getProgress()/100.f));
次はstartAngleの
int startAngle = 270 - sweepAngle/2;
スタート角度があるため、この方法で計算される計算することです:
だからあなただけの270を交換する必要があります(..などを左に右に左、右)私は25%の進捗
sweepAngle = 90 degrees (90 degrees is quarter of a circle)
start angle = 225 (45 degrees away from 270)
にあなたが進歩が、他の側面から行きたい場合があります考慮します開始角度で。
ドローアークのサンプル。
public static Bitmap clipRoundedCorner(Bitmap bitmap, float r, boolean tr, boolean tl, boolean bl, boolean br)
{
int W = bitmap.getWidth();
int H = bitmap.getHeight();
if (r < 0)
r = 0;
int smallLeg = W;
if(H < W)
smallLeg = H;
if (r > smallLeg)
r = smallLeg/2;
float lineStop = r/2;
Path path = new Path();
path.moveTo(0,0);
if(tr)
{
path.moveTo(0, lineStop);
path.arcTo(new RectF(0,0, r,r), 180, 90, false);
}
path.lineTo(W-lineStop, 0);
if(tl)
path.arcTo(new RectF(W-r,0, W,r), 270, 90, false);
else
path.lineTo(W, 0);
path.lineTo(W, H-lineStop);
if(bl)
path.arcTo(new RectF(W-r,H-r, W,H), 0, 90, false);
else
path.lineTo(W, H);
path.lineTo(lineStop, H);
if(br)
path.arcTo(new RectF(0,H-r, r,H), 90, 90, false);
else
path.lineTo(0,H);
if(tr)
path.lineTo(0,lineStop);
else
path.lineTo(0,0);
Bitmap output = Bitmap.createBitmap(W, H, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
canvas.drawPath(path, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, 0, 0, paint);
return output;
}
http://stackoverflow.com/questions/4196749/draw-arc-with-2-points-and-center-of-the-circle – vajapravin
@vajapravin私はそれを試してみましたが、それらの機能は利用できませんアンドロイドのキャンバスのために。 –
私たちはアンドロイドでこの機能を持っています:drawArc(RectF、float、float、boolean、Paint); –