web-dev-qa-db-fra.com

Android: Fade View in and Out

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?

37
DominicM

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);
70
DominicM

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();
       }
     });
19
David Maes

Vous devez lire Fondu enchaîné deux vues à partir de Android developers. Dans ce tutoriel, vous apprendrez comment faire ce que vous voulez.

4
Mario Kutlev

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);
0
msh

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.

0
Abhilash Das