2016-05-26 3 views
1

У меня есть эта анимация, где она немного масштабируется, а затем масштабируется до исходного размера. Но по мере того, как его масштабирование возвращается к первоначальному размеру, оно медленно уменьшает масштаб, а его первоначальный размер становится неожиданным. И нет, это не ускоряющий замедление интерполятора, я также попробовал линейный, и он сделал то же самое.андроид масштаб анимации вдруг возвращается к исходному размеру

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:startOffset="1000" 
    android:shareInterpolator="true"> 
    <alpha 
     android:fromAlpha="0.0" 
     android:toAlpha="1.0" 
     android:duration="1000" /> 
    <scale 
     android:duration="1000" 
     android:fromXScale="1.0" 
     android:fromYScale="1.0" 
     android:pivotX="25%p" 
     android:pivotY="75%p" 
     android:toXScale="1.1" 
     android:toYScale="1.1" /> 
    <set 
     android:startOffset="500"> 
     <scale 
      android:duration="1000" 
      android:fromXScale="1.1" 
      android:fromYScale="1.1" 
      android:pivotX="25%p" 
      android:pivotY="75%p" 
      android:toXScale="1.0" 
      android:toYScale="1.0" /> 
    </set> 
</set> 

ответ

1

Ваша первая продолжительность анимации в масштабе - 1000. Вторая начинается после 500 мс. Поэтому они мешают. Возможно, это твоя проблема. Вы можете попробовать установить вторую анимацию начать офсетную 1000. Если это не поможет, вы можете взглянуть на Animation.fillAfter()

EDIT: Это работает

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true" 
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
android:shareInterpolator="true" 
android:startOffset="1000"> 
<alpha 
    android:fromAlpha="0.0" 
    android:toAlpha="1.0" 
    android:duration="1000" /> 
<scale 
    android:duration="1000" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:pivotX="25%p" 
    android:pivotY="75%p" 
    android:toXScale="1.1" 
    android:toYScale="1.1" /> 
<scale 
    android:duration="1000" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:pivotX="25%p" 
    android:pivotY="75%p" 
    android:startOffset="1000" 
    android:toXScale="0.9" 
    android:toYScale="0.9" /> 
</set> 

И вы не должны иметь второй набор внутри набора, просто добавьте startOffset непосредственно к анимации масштаба.

И я просто понял, что вторая шкала должна использовать 1.0 и 0.9 вместо 1.1 и 1.0. Потому что он принимает процент текущего размера, а не оригинальный размер.

+0

установка startOffset для анимации секунд помогла немного, но все еще имеет внезапное падение до исходного размера. Я не думаю, что fillAfter изменил ситуацию. – user3622171

+0

Протестировано. FillAfter на корневом элементе делает трюк для меня: –

0

1) Я думаю, вы можете сделать это так. Позиция и масштаб ... vs свойства не станут оригинальными.

 view.animate() 
      .setDuration(1000) 
      .alpha(1) 
      .x(view.getPivotX() * 25/100) 
      .y(view.getPivotX() * 25/100) 
      .scaleX(1.1f) 
      .scaleY(1.1f) 
      .start(); 

    view.animate() 
      .setStartDelay(1000) 
      .setDuration(1000) 
      .scaleX(1f) 
      .scaleY(1f) 
      .start(); 

2) Продолжительность анимации 1000 мс и вторая задержка 500. Это может вызвать проблемы.

Смежные вопросы