2014-09-11 5 views
0

У меня проблема с анимацией в Android. Между концом и началом этой анимации мигает на экране изображение целиком без альфа-эффекта. Анимация начинается с альфа 0 и заканчивается тоже с альфа 0. У меня есть этот код:Повтор анимации для Android

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true" > 

<alpha 
    android:duration="4000" 
    android:fromAlpha="0.0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:toAlpha="1.0" /> 

<scale 
    android:duration="12000" 
    android:fromXScale="0.5" 
    android:fromYScale="0.5" 
    android:pivotX="50%" 
    android:pivotY="10%" 
    android:toXScale="3" 
    android:toYScale="2" 
    android:interpolator="@android:anim/linear_interpolator"/> 

<alpha 
    android:startOffset="10000" 
    android:duration="1500" 
    android:fromAlpha="1.0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:toAlpha="0" /> 
</set> 

и этот код в Java

imageView.startAnimation(animace); 

animace.setAnimationListener(new Animation.AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation animation) { 
     imageView.setVisibility(View.VISIBLE); 
    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     imageView.setVisibility(View.INVISIBLE); 
     imageView.startAnimation(animace); 
    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 
    } 
}); 
+0

вашего название было что-то о ** Run() **, но не упоминается в фрагменте коды при условии, пожалуйста, напишите полный код – nobalG

+0

Вы пытаетесь выполнить 'imageView.setAlpha (0f); 'в' onAnimationStart' перед вызовом 'imageView.setVisibility (View.VISIBLE);'? – Stanislav

+0

Нет, это не работает, когда вы устанавливаете альфа-изображение, тогда изображение остается прозрачным, а анимация ничего не показывает. –

ответ

1

Это происходит потому, что анимации в файле XML является запущенными в том же время. У вас есть анимация, которая изменяет Alpha от 0 до 1 и одну, которая изменяется от 1 до 0. Я предполагаю, что вы хотите запустить их в последовательности, поэтому вы должны разделить их в отдельных файлах. Одним из решений может быть примерно так: (не проверено)

fade_in.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true" > 

<alpha 
    android:duration="4000" 
    android:fromAlpha="0.0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:toAlpha="1.0" /> 

</set> 

fade_out.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true" > 

<alpha 
    android:startOffset="10000" 
    android:duration="1500" 
    android:fromAlpha="1.0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:toAlpha="0" /> 

</set> 

scale.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true" > 

<scale 
    android:duration="12000" 
    android:fromXScale="0.5" 
    android:fromYScale="0.5" 
    android:pivotX="50%" 
    android:pivotY="10%" 
    android:toXScale="3" 
    android:toYScale="2" 
    android:interpolator="@android:anim/linear_interpolator"/> 

</set> 

И затем, в вашем код, запустить fade_in и масштабировать в одно и то же время и запустить fade_out после завершения fade_in:

imageView.startAnimation(fadeInAnimation); 
imageView.startAnimation(scaleAnimation); 

fadeInAmination.setAnimationListener(new Animation.AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation animation) { } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     imageView.startAnimation(fadeOutAnimation); 
    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { } 
}); 

Я не уверен, где вам нужно установить Visible and Invisible, но вы можете прикрепить AnimationListener для каждого объекта и поместить их в соответствии с вашими потребностями.

Надеется, что это помогло :)

+0

У меня есть второй альфа-запуск 10000, эта анимация в порядке. И теперь я нашел решение благодаря @Stanislav. Я не знаю, почему, но установка видимости на INVISIBLE или VISIBLE не работает (Android Studio не показывает никаких ошибок), но когда я изменяю это на настройку alpha 0f на animationEnd и 1f на animatioStart, теперь он работает. –

+0

Действительно, я пропустил этот. Извини :) – tudor

0

Этой работа:

animace.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 
      imageView.setAlpha(1f); 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      imageView.setAlpha(0f); 
      imageView.startAnimation(animace); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
    }); 
Смежные вопросы