2014-07-06 15 views
5

Chcę, aby mój obraz był odwracany w poziomie przez 4 razy, a jednocześnie zmniejszał go.Android - Flip Animacja nie przesuwa się płynnie

Mam następujący kod do przewracania:

ObjectAnimator flipAnimation = ObjectAnimator.ofFloat(view, "rotationY", 0.0f, 1440f); 
flipAnimation.setDuration(4000); 
flipAnimation.start(); 

I mam następujący kod w scale_down.xml skalowania w dół:

<scale 
     android:duration="4000" 
     android:fromXScale="1" 
     android:fromYScale="1" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:toXScale="0.1" 
     android:toYScale="0.1" > 
    </scale> 

Jednak gdy uruchamiam moją aplikację na emulatorze w Zaćmienie, odwracanie obrazu pokazuje niezręczny efekt. Jak widać na zdjęciach, czasami podczas przewracania jedna strona pionowa jest dłuższa niż druga, co powoduje efekt rozciągania, który nie jest tym, czego chcę. Każdy pomaga wyeliminować ten efekt?

enter image description here enter image description here enter image description here

Odpowiedz

5

Efekt ten nazywany jest zniekształcenie perspektywa. I to jest dokładnie to, co jest dla setCameraDistance():

Ustawia odległość wzdłuż osi Z (prostopadła do płaszczyzny X/Y na których poglądy są narysowane) z aparatem do tego widoku. Odległość kamery od wpływa na transformacje 3D, na przykład obrót wokół osi X i Y . Jeśli właściwości rotationX lub rotationY są zmieniane i ten widok jest duży (ponad połowa rozmiaru ekranu), zaleca się, aby zawsze używać odległości kamery większej niż wysokość (obrót osi X) lub szerokości (Obrót osi Y) tego widoku.

Odległość kamery od płaszczyzny widoku może mieć wpływ na zniekształcenie perspektywy po obróceniu wokół osi x lub osi y. Na przykład duża odległość spowoduje duży kąt widzenia , a podczas obracania nie będzie dużo zniekształceń perspektywy. Krótka odległość może spowodować znacznie większe zniekształcenie perspektywy po obrocie, a także może spowodować powstanie artefaktów rysunku , jeśli widok obrócony częściowo kończy się za kamerą (dlatego zaleca się użycie odległości przynajmniej , o ile rozmiar widoku, jeśli widok ma być obracany.)

Możesz chcieć skrzypce z wartością, w zależności od wymiarów widoku i efektu wizualnego, który chcesz osiągnąć. Mam dobry wynik z:

view.setCameraDistance(10 * view.getWidth()); 
+1

WIELKA! To jest to czego chcę. I thx dla informacji. Ustawienie liczby = 10 jest już całkiem zadowalające. – Derekyy

Powiązane problemy