2012-09-13 21 views
12

yolunda Otomatik Döndürme ile bir yol boyunca android sürümünde aşağıdaki görüntü gibi bir yol (net bir fikir için ekledim) gibi bir yolda hareket eden bir sinek bir görüntü canlandırmaya çalışıyorum 2.2Animasyon Android

yolu kullanılarak çizilir sonra bu oto rotasyon forsetting bir özelliğe sahip olarak

Eh, bu iphone çok basit bir şekilde yapılabilir i dayalı nesneyi döndürmek olacağına inanıyorum

animation.rotationMode = kCAAnimationRotateAuto; 

yol üzerinde

Fly path

I yöntemleri eğrileri kübik Bzier eğrisi ile çizilir Öyle ki

path.moveTo(float x, float y); 
path.lineTo(float x, float y); 
path.curveTo(float c0X, float c0Y, float c1X, float c1Y, float x, float y); 

kullanılarak nineoldandroid kütüphane kullanılarak ma bu yol üzerinden uçmak animasyon mümkün.

Şimdi, denediğim şey, uçağımın yol boyunca kendi kendine dönmesine izin verecek bir şey uygulamaktır ve hiçbir yere ulaşamıyorum.

Lütfen bana bazı fikirlerle Yardım Edin! :(:(

+0

var ve bu uygulamanın 2'de yapılmalıdır çünkü ı Android sürümü 2.2 belirtmiştik.2 sadece, bu yüzden ben niçin anladım NineoldAndroid Kütüphane – John

cevap

1

Sen benim kullanmak isterseniz demo ve nineoldandroids ait lib ve these 4 java files indirmek zorunda kolaydı çözüm

, ben nineoldandroids ait demo değerlendirici modifiye.

Çok fazla varburada yayınlamak için:

Ben saha açısıyla Pathpoint uzatmak:

Sadece fikir edinmek için. Ardından, tüm hesaplanmış Noktaları bir yığına (basit bir kayan [] []) yazın

İlk hesaplamadan sonra açı, atan ve son 2 nokta yığında hesaplanabilir.

Yığını kullanmak istemezseniz, zaman aralığını değiştirebilir ve bir sonraki noktanın nerede çizileceğini ve bunların dışındaki açıları hesaplayabilirsiniz.

Sadece şunu düşünün: İlk önce nerede yürüdüğünüzü izler misiniz, sonra yürürsünüz ya da yürüyorsunuz, sadece yürüyüş yapın ve hedefin açısını seçin. Her piksel için yüksek olan ve açı hesaplayan görüntü yoğunluklarına sahip olduğumuzdan bu gerekli değildir.

İşte PathEvaluator

public class PathEvaluatorAngle implements TypeEvaluator<PathPointAngle> { 

private static final int POINT_COUNT = 5000; 
private float[][] stack = new float[POINT_COUNT][2]; 
private int stackC = 0; 

@Override 
public PathPointAngle evaluate(float t, PathPointAngle startValue, PathPointAngle endValue) { 
    float x, y; 
    if (endValue.mOperation == PathPointAngle.CURVE) { 
     float oneMinusT = 1 - t; 
     x = oneMinusT * oneMinusT * oneMinusT * startValue.mX + 
       3 * oneMinusT * oneMinusT * t * endValue.mControl0X + 
       3 * oneMinusT * t * t * endValue.mControl1X + 
       t * t * t * endValue.mX; 
     y = oneMinusT * oneMinusT * oneMinusT * startValue.mY + 
       3 * oneMinusT * oneMinusT * t * endValue.mControl0Y + 
       3 * oneMinusT * t * t * endValue.mControl1Y + 
       t * t * t * endValue.mY; 
    } else if (endValue.mOperation == PathPointAngle.LINE) { 
     x = startValue.mX + t * (endValue.mX - startValue.mX); 
     y = startValue.mY + t * (endValue.mY - startValue.mY); 
    } else { 
     x = endValue.mX; 
     y = endValue.mY; 
    } 

    stack[stackC][0] = x; 
    stack[stackC][1] = y; 

    double angle; 

    if (stackC == 0){ 
     angle = 0; 
    } else if (stackC >= POINT_COUNT){ 
     throw new IllegalStateException("set the stack POINT_COUNT higher!"); 
    } else { 
     angle = Math.atan(
       (stack[stackC][1] - stack[stackC-1][1])/
       (stack[stackC][0] - stack[stackC-1][0])  
       ) * 180d/Math.PI; 
    } 
    stackC++; 
    return PathPointAngle.moveTo(x, y, angle); 
} 

}

+0

zip referans ile java dosyaları hayır Daha uzun geçerli, 4 java dosyasının koduna sahip olacak şekilde tekrar güncelleme şansınız var mı? – crazyPixel

İlgili konular