2017-10-20 29 views
0

Lors d'un événement tactile, une vue personnalisable est créée, ajoutée à la vue racine, de sorte qu'elle s'affiche à l'écran, puis une animation de fondu pour l'effacer . Tout fonctionne, mais pas sous pression!Comment vous assurer que la vue est supprimée après une animation sur des touches répétées

Lorsque j'exécute à plusieurs reprises l'événement tactile, par exemple 3 touches rapides dans la seconde, le dessin personnalisable est laissé de façon inattendue à l'écran.

Pourquoi est-ce? Je veux le retirer à chaque fois. Voici le code:

/* 
* Adds view and fades out 
*/ 
public void fadeoutView(final View v){ 

     if (rootView != null) { 
      rootView.removeView(v); 
     } 
     rootView.addView(v); 

     Log.v(LOG_TAG, "Fadeout called"); 
     final Animation fadeOut = new AlphaAnimation(1.0f, 0.0f); 
     fadeOut.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
       Log.v(LOG_TAG, "Fadeout onAnimationStart t:" + System.currentTimeMillis()); 

      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       Log.v(LOG_TAG, "Fadeout onAnimationEnd t:" + System.currentTimeMillis()); 
       if (v != null && rootView != null) { 
        rootView.removeView(v); 
       } 

      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 

      } 
     }); 
     fadeOut.setFillAfter(true); // Want to keep affect 
     fadeOut.setInterpolator(new DecelerateInterpolator()); 
     fadeOut.setStartOffset(0); 
     fadeOut.setDuration(500); 
     if (v != null) { 
      v.startAnimation(fadeOut); 
     } 
} 

C'est exécuté à partir du UIThread au sein OnTouch public boolean (Voir la vue, MotionEvent MotionEvent)

Répondre

0

Étrangement, cela a été résolu de prendre le removeView dans onAnimationEnd:

@Override 
public void onAnimationEnd(Animation animation) { 
    // No processing needed 
} 

Je ne comprends pas pourquoi la suppression de la ligne de suppression de la vue a empêché l'ajout inattendu de la vue. Des idées?