Je dois afficher un bouton d’image qui apparaît en fondu (et en va-et-vient et ainsi de suite ...) La transparence peut être définie avec setAlpha, mais comment puis-je faire un fondu/fondu en fondu? Je veux dire que je ne peux pas le faire sur un autre fil parce que vous devez faire de telles choses sur le fil de l'interface utilisateur, non?
J'imagine que cela peut être fait avec des animations mais je n'ai rien trouvé, car je n'ai aucune expérience des animations et je ne sais pas vraiment quoi chercher ...
En fait, ce que je veux vraiment, c'est fondre une image et une autre, mais je suppose que le moyen le plus simple est de placer le premier bouton d’image en dessous de la seconde et d’affaiblir la seconde. Ou y a-t-il un moyen plus facile de le faire?
Voici la solution que j'utilise maintenant, qui fonctionne au niveau de l'API inférieur à 12:
AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f);
anim.setDuration(1000);
anim.setRepeatCount(NUM_REPEATS);
anim.setRepeatMode(Animation.REVERSE);
button.startAnimation(anim);
Ceci est une animation que nous avons utilisée dans notre projet. Spinner est une vue afin que vous puissiez changer cela avec votre imageview. Donc effectivement 2 images superposées, une invisible. Voici comment nous l'avons fait. J'espère que ça aide.
spinner.setVisibility(View.VISIBLE);
spinner.setAlpha(0);
spinner.animate().setDuration(200).alpha(1).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
spinner.setVisibility(View.VISIBLE);
}
});
infoActivityContent.animate().setDuration(200).alpha(0).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
infoActivityContent.setVisibility(View.GONE);
mainPresenter.logout();
}
});
Vous devez lire Fondu enchaîné deux vues à partir de Android developers
. Dans ce tutoriel, vous apprendrez comment faire ce que vous voulez.
Vous pouvez transformer plusieurs images séquentielles de votre première image en image précédente et inversement, puis les définir en tant que animation-list
et lancer l'animation dans onCreate
button_frames.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:drawable="@drawable/frame1" Android:duration="100" />
<item Android:drawable="@drawable/frame2" Android:duration="100" />
....
disposition:
<ImageView Android:id="@+id/button"
Android:background="@drawable/button_frames"/>
OnCreate:
ImageView button= (ImageView)findViewById(R.id.button);
mAnimation = (AnimationDrawable) animationView.getBackground();
button.postDelayed(new Runnable() {
public void run() {
mAnimation.start();
}
}, 100);
en kotlin:
view.animate().alpha(1f).setDuration(1000)
.setInterpolator(AccelerateInterpolator()).start()
Vous pouvez ajouter une AnimatorListenerAdapter
dans setListener
pour gérer d'autres états d'affichage.