2011-07-20 17 views
10

Özel bir görünüm (extends View) üzerinde çalışıyorum ve onDraw yönteminde çalışıyorum.belirli bir noktada döndürülen yolu çiz

Bir ok bir yol olup: bu belirli bir açı tasvir döndürülmesi gereken farklı senaryolarda

ARROW_PATH = new Path(); 
    ARROW_PATH.setLastPoint(20, 37); 
    ARROW_PATH.lineTo(14, 25); 
    ARROW_PATH.lineTo(18, 26); 
    ARROW_PATH.lineTo(17, 4); 
    ARROW_PATH.lineTo(23, 4); 
    ARROW_PATH.lineTo(22, 26); 
    ARROW_PATH.lineTo(26, 25); 
    ARROW_PATH.close(); 

, ve görünümde koordinat belirli de çizmek gerekir. Koordinat ayrıca senaryoya göre değişir. px ve py değerleri (Ben de varken py > px.

ok dar ve uzun boylu alır eşit olmadığında yolunun yönü çarpık olduğu gibi ancak Canvas.rotate ile oynamak denedim

, görünüşe Canvas.rotate(angle, 0, 0); ve sonra ARROW_PATH.moveTo(x, y); çalıştı ama coords keyfi açı ile döndürülür gibi çok zor hesaplamak için yapım görünüyor koordinat. İdeal

, ben yolunu değil, tuval döndürmek istediğiniz ama yok gerekli bu işlemin API tarafından desteklendiğini düşünün.

Birisi bu problem için daha iyi bir yaklaşım önerebilir mi?

teşekkürler, p.

cevap

9

Çalıştırmanın bir yolunu buldum.

Öncelikle modifiye benim o

ARROW_PATH = new Path(); 
ARROW_PATH.setLastPoint(0, 17); 
ARROW_PATH.lineTo(-6, 5); 
ARROW_PATH.lineTo(-2, 6); 
ARROW_PATH.lineTo(-3, -16); 
ARROW_PATH.lineTo(3, -16); 
ARROW_PATH.lineTo(2, 6); 
ARROW_PATH.lineTo(6, 5); 
ARROW_PATH.close(); 

ve sonra çevirmek için ekstra bir çağrı çizim bulmalarına yardımcı

merkezli edildi Path böylece: Bu kalıcı bir yol döndürmek için uygun bir yoldur

canvas.save(); 
canvas.rotate(angle, x, y); 
canvas.save(); 
canvas.translate(x, y); 
canvas.drawPath(ARROW_PATH, paint); 
canvas.restore(); 
canvas.restore(); 
+0

Neden saklanıyorsunuz? devlet iki kere mi? Gereksiz görünüyor. –

+0

çift kayıt/çift geri yükleme yapmadan test edin ... işe yaramıyor. Daha iyi bir çözümünüz varsa (test ettiyseniz), gönderin. – pstanton

23

(bir matrisin sonraki uygulamasına kadar bu şekilde kalacaktır):

Matrix mMatrix = new Matrix(); 
RectF bounds = new RectF(); 
mPath.computeBounds(bounds, true); 
mMatrix.postRotate(myAngle, bounds.centerX(), bounds.centerY()); 
mPath.transform(mMatrix); 
+0

Bu soru, soru merkezi yolunda android tuval üzerinde bir Yol örneği döndürmek sorar yardımcı olur. – Master

+0

Thnaks adam günümü kurtardı! _canvas.rotate kullanamıyorum (mRotation, mWidth/2, mHeight/2); çünkü LayerDrawable kullanıyorum –

İlgili konular