2013-10-15 26 views
7

Animasyonlu bir çizim halkasını 0 ile 360 ​​derece arasında başarılı bir şekilde açmaya başladım. Ancak, halkanın kuyruğu başını 360 açıyla karşıladığında, tüm çizim kaybolur.Android'de Path.arcTo() işlevini kullanarak bir halka çizmede garip davranış

enter image description here

bildirim neden ben çember haline hemen önce -359 için sweepAngle ayarlamanız,

Bu 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); 

yılında halka benim kodudur ve bu sonucudur. Ancak, sweepAngle değerini -360 olarak değiştirirsem. Bu sonucu üretir.

enter image description here

O kaybolur

!! Bunu nasıl çözeceğimi bilen var mı, lütfen bana yardım edin?

Teşekkürler.

PS. drawArc() kullanmak istemiyorum çünkü ringin içinde bir delik açmak istiyorum. drawArc() ile düğmem gitmiş olacak.

cevap

2

Android'in gerçekten çizim yapmadan önce modemi 360 olacak. Yani x - 360 === x ve hiçbir şey çizmeyecek!

+0

tek yolun ardından .... öyle düşünüyorum Tüm çekmek kod tek satır hariç, o son kare için aynıydı Yapabiliriz sweepAngel = 360 için başka bir çizim kullanmaktır. Beğen @Kevin – SaintTail

+0

@ Sintelik, bu konuyu işaret eder, ancak bunun üstesinden nasıl geleceğini söylemez. Bu nasıl kabul edilir? – azizbekian

1

Buna geç kalıyorum, ancak animasyonun son karesi olarak sağlam bir daire ekleyerek çözdüm (AnimationDrawable kullanıyordum, ancak bu durumda fikir aynıdır). yerine

:

mPath.arcTo(rectF, startAngle, sweepAngle); 

gibi bir şeyle:

mPath.addCircle(cenX, cenY, innerRadius, Path.Direction.CCW); 
İlgili konular