Анимация TextView - затухание, ожидание, исчезновение

Я делаю приложение для картинной галереи. В настоящее время у меня есть изображение с текстовым представлением внизу. В настоящее время он просто полупрозрачен. Я хочу, чтобы он исчез, подождите 3 секунды, а затем исчезнет на 90%. Привлечение внимания к нему или загрузка нового рисунка заставят его повторить цикл. Я прочитал через десяток страниц и пробовал несколько вещей, никаких успехов. Все, что я получаю, - это постепенное исчезновение и мгновенное исчезновение.

Ответы

Ответ 1

Вы можете использовать дополнительный объект анимации (который не изменяет его альфу), чтобы предотвратить мгновенное исчезновение, установить анимационный эффект для вашего эффекта постепенного затухания и запустить дополнительный объект анимации в анимации анимации и Fade-in, то вы начинаете исчезать на конце анимации дополнительного объекта анимации, попробуйте ссылку ниже, это поможет..

Автоматический эффект затухания для текстового просмотра

Ответ 2

protected AlphaAnimation fadeIn = new AlphaAnimation(0.0f , 1.0f ) ; 
protected AlphaAnimation fadeOut = new AlphaAnimation( 1.0f , 0.0f ) ; 
txtView.startAnimation(fadeIn);
txtView.startAnimation(fadeOut);
fadeIn.setDuration(1200);
fadeIn.setFillAfter(true);
fadeOut.setDuration(1200);
fadeOut.setFillAfter(true);
fadeOut.setStartOffset(4200+fadeIn.getStartOffset());

Прекрасно работает на белом фоне. В противном случае вам нужно переключать значения при создании экземпляра класса AlphaAnimation. Вот так:

AlphaAnimation fadeIn = new AlphaAnimation( 1.0f , 0.0f ); 
AlphaAnimation fadeOut = new AlphaAnimation(0.0f , 1.0f ); 

Это работает с черным фоном и белым цветом текста.

Ответ 3

Это решение, которое я использовал в моем проекте для циклизации анимации fade-in/fade-out в TextViews:

private void setUpFadeAnimation(final TextView textView) {
    // Start from 0.1f if you desire 90% fade animation
    final Animation fadeIn = new AlphaAnimation(0.0f, 1.0f);
    fadeIn.setDuration(1000);
    fadeIn.setStartOffset(3000);
    // End to 0.1f if you desire 90% fade animation
    final Animation fadeOut = new AlphaAnimation(1.0f, 0.0f);
    fadeOut.setDuration(1000);
    fadeOut.setStartOffset(3000);

    fadeIn.setAnimationListener(new Animation.AnimationListener(){
        @Override
        public void onAnimationEnd(Animation arg0) {
            // start fadeOut when fadeIn ends (continue)
            textView.startAnimation(fadeOut);
        }

        @Override
        public void onAnimationRepeat(Animation arg0) {
        }

        @Override
        public void onAnimationStart(Animation arg0) {
        }
    });

    fadeOut.setAnimationListener(new Animation.AnimationListener(){
        @Override
        public void onAnimationEnd(Animation arg0) {
            // start fadeIn when fadeOut ends (repeat)
            textView.startAnimation(fadeIn);
        }

        @Override
        public void onAnimationRepeat(Animation arg0) {
        }

        @Override
        public void onAnimationStart(Animation arg0) {
        }
    });

    textView.startAnimation(fadeOut);
}

Надеюсь, это поможет!

Ответ 4

Функции расширения Kotlin для ответа Гая Котала:

inline fun View.fadeIn(durationMillis: Long = 250) {
    this.startAnimation(AlphaAnimation(0F, 1F).apply {
        duration = durationMillis
        fillAfter = true
    })
}

inline fun View.fadeOut(durationMillis: Long = 250) {
    this.startAnimation(AlphaAnimation(1F, 0F).apply {
        duration = durationMillis
        fillAfter = true
    })
}