Eu quero ter uma animação de 2 segundos de um ImageView que gasta 1000ms diminuindo e depois 1000ms diminuindo.
Aqui está o que eu tenho até agora no meu construtor ImageView:
Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setDuration(1000);
Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);
AnimationSet animation = new AnimationSet(true);
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);
Quando executo essa animação, nada aparece. No entanto, quando removo uma das animações alfa, o comportamento funciona conforme o esperado.
Coisas que eu já tentei:
- Cada combinação concebível de
setFillBefore
,setFillAfter
esetFillEnabled
. - Adicionando um
LinearInterpolator
aoAnimationSet
.
Respostas:
Descobri meu próprio problema. A solução acabou sendo baseada em interpoladores.
Se você estiver usando o Kotlin
fonte
Eu sei que isso já foi respondido, mas ...
Maneira rápida e fácil de fazer um desvanecimento rápido e automático com uma repetição automática. Aproveitar
EDIT : Na sua atividade, adicione isto:
fonte
alpha
recurso, como posso usá-lo? GraçasviewToAnimate.startAnimation(AnimationUtils.loadAnimation(context, R.anim.fade_in_out)
:, onde existe um arquivo fade_in_out.xml na pasta anim em res.fonte
Aqui está minha solução usando o AnimatorSet, que parece ser um pouco mais confiável que o AnimationSet.
fonte
Outra alternativa:
Não é necessário definir 2 animações para fadeIn e fadeOut . fadeOut é o inverso de fadeIn .
Então você pode fazer isso com o Animation.REVERSE assim:
em seguida, onAnimationEnd :
fonte
Como acredito no poder do XML (para layouts), isso é equivalente à resposta aceita , mas apenas como um recurso de animação:
A
fillAfter
é para o fade para permanecer depois de completar a animação. Eleinterpolator
manipula a interpolação das animações, como você pode adivinhar. Você também pode usar outros tipos de interpoladores, como Linear ou Overshoot.Certifique-se de iniciar sua animação em sua exibição:
fonte
Aqui está o que eu costumava esmaecer dentro / fora do Views, espero que isso ajude alguém.
fonte
AnimationSets não parecem funcionar como esperado. No final, desisti e usei o postDelayed () da classe Handler para sequenciar animações.
fonte
Se você usa o Animator para criar animação, pode
anim (diretório) -> fade_out.xml
Em java
Outra maneira de fazer a animação desaparecer apenas com o código java é
fonte
Você também pode usar o animationListener, algo como isto:
fonte
Eu realmente gosto da solução Vitaly Zinchenkos , pois era curta.
Aqui está uma versão ainda mais breve no kotlin para um desvanecimento simples
fonte