2013-10-15 12 views
7

私は0から360の角度で掃引を開始することでアニメーション描画リングを実装しました。 しかし、リングの尾が360度で頭を満たしていると、すべての図が消えます。AndroidでPath.arcTo()を使用してリングを描画する際の奇妙な動作

enter image description here

予告ここで私はそれが円になり、直前に-359にsweepAngleを設定することを、

これはonDraw()

 float startAngle = 270; 
     float sweepAngle = -359; 

     paint.setColor(Color.DKGRAY); 
     paint.setShadowLayer(4, 2, 2, 0x80000000); 

     rectF.set(cenX - outerRadius, cenY - outerRadius, cenX + outerRadius, 
       cenY + outerRadius); 
     path.arcTo(rectF, startAngle, sweepAngle); 
     //canvas.drawArc(rectF, 0, 360, false, paint); 
     rectF.set(cenX - innerRadius, cenY - innerRadius, cenX + innerRadius, 
       cenY + innerRadius); 
     /*paint.reset(); 
     paint.setAntiAlias(true); 
     paint.setColor(Color.WHITE); 
     canvas.drawArc(rectF, 0, 360, false, paint);*/ 
     path.arcTo(rectF, startAngle + sweepAngle, -(sweepAngle)); 

     canvas.drawPath(path, paint); 

でリングのための私のコードであり、これは結果です。 しかし、sweepAngleを-360に変更した場合。この結果が得られます。

enter image description here

それが消えます! 誰でもこれを解決する方法を知っていますか?

ありがとうございました。

PS。私はdrawArc()を使用したくないので、リングの内側に穴を開けたいからです。 drawArc()で、私のボタンはなくなります。

答えて

2

私はアンドロイドが実際にそれを描く前に360をmodとすると思います。だからx - 360 === xとそれは何も描画されません!

+0

私は唯一の方法は、その後....そう思うすべてのドローコードは、1つの行を除いて、その最後のフレームのために同じでした私たちはsweepAngel = 360のために別の図面を使うことです。@ケビンは – SaintTail

+0

@SaintTailと言っていますが、これは問題を指摘していますが、これを克服する方法は分かりません。どうしてこれが受け入れられるのでしょうか? – azizbekian

1

私はこれで遅くなりましたが、アニメーションの最後のフレームとして黒丸を追加して解決しました(私はAnimationDrawableを使用していましたが、この場合はアイデアは同じです)。置き換え

mPath.arcTo(rectF, startAngle, sweepAngle); 

をのようなもので:

mPath.addCircle(cenX, cenY, innerRadius, Path.Direction.CCW); 
関連する問題