2013-08-28 6 views
5

mi animowanie się ImageView stosując następujące animacje Skala:animacja Skalowanie na już skalowany widzenia

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <scale 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:fromXScale="1.0" 
     android:toXScale="2.0" 
     android:fromYScale="1.0" 
     android:toYScale="2.0" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:duration="1000" /> 

    <scale 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:fromXScale="2.0" 
     android:toXScale="0.0" 
     android:fromYScale="2.0" 
     android:toYScale="0.0" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:startOffset="1000" 
     android:duration="1000" /> 

    <rotate xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fromDegrees="0" 
     android:interpolator="@android:anim/linear_interpolator" 
     android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" 
     android:repeatCount="3" 
     android:duration="800" android:startOffset="0" /> 
</set> 

Ale problemem jest to, że ImageView jest już skalowany przez układ, kiedy rozpoczyna się pierwsza animacja. To prowadzi do zauważalnego skoku, kiedy pierwsza animacja ustawia skalę na 1.0.

Czy istnieje sposób informowania animacji, że powinien rozpocząć się od rzeczywistego rozmiaru widoku w układzie? Próbowałem także pracować z procentami, które dały taki sam efekt.

Odpowiedz

2

Z tego, co rozumiem z twojego zapytania, wynika, że ​​chcesz poprawić płynność animacji, unikając wyraźnie widocznej animacji na początku. Myślę minimalizacji „od skali” w pierwszej skali pomogłoby uniknąć skoku, może coś w tym pomoże:

<?xml version="1.0" encoding="utf-8"?> 

<scale 
    android:duration="1000" 
    android:fromXScale="0.5" 
    android:fromYScale="0.5" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toXScale="1.0" 
    android:toYScale="1.0" /> 
<scale 
    android:duration="1000" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:startOffset="1000" 
    android:toXScale="1.0" 
    android:toYScale="1.0" /> 

<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="800" 
    android:fromDegrees="0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:repeatCount="3" 
    android:startOffset="0" 
    android:toDegrees="360" /> 

Przepraszam, że musiał pan czekać; spróbować czegoś takiego:

<?xml version="1.0" encoding="utf-8"?> 

<scale 
    android:duration="400" 
    android:fromXScale="1" 
    android:fromYScale="1" 
    android:pivotX="20%" 
    android:pivotY="20%" 
    android:repeatCount="1" 
    android:repeatMode="reverse" 
    android:toXScale="1.1" 
    android:toYScale="1.1" /> 

+0

Nie, co ja próbuję wykonać jest mieć Ani skalowania Początek nie zaczyna się od stałej wartości (ani 0.5 ani 1.0), ale od rzeczywistej wartości skalowania ImageView. Jest to konieczne, ponieważ nie wiem do jakiego rozmiaru View będzie wymiarowany na danym urządzeniu. –

+0

Edytowałem swoją odpowiedź. Wypróbuj ten kod. – Sathya

+0

Dziękuję, ale myślę, że źle zrozumiałeś pytanie. Moim problemem jest to, że ImageView może mieć dowolną skalę na początku. Rozpoczęcie od ustalonej skali spowoduje zauważalny skok w animacji, bez względu na to, co ustawię. –