2012-10-23 2 views
4

Je suis afficher une mise en page avec animation fondu en manipulant ses niveaux alpha en utilisant AlphaAnimation.AlphaAnimation ne fonctionne pas dans Sandwich à la crème glacée

La solution actuelle fonctionne correctement sur deux de mes appareils qui utilisent Gingerbread et un qui utilise Froyo. Cependant, cela ne fonctionne pas sur Ice Cream Sandwich ?!

Voici ma mise en page xml.

<LinearLayout 
     android:id="@+id/photoOptionBar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:alpha="0" 
     android:background="@color/gpsBackground" 
     android:orientation="horizontal"> 

     <ImageButton 
      android:id="@+id/displayShareBtn" 
      style="@android:style/Widget.Holo.Button.Borderless.Small" 
      android:background="@android:color/transparent" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:padding="20dp" 
      android:src="@drawable/share" 
      android:contentDescription="Share the picture"/> 

     <ImageButton 
      android:id="@+id/displayDiscardBtn" 
      style="@android:style/Widget.Holo.Button.Borderless.Small" 
      android:background="@android:color/transparent" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:padding="20dp" 
      android:src="@drawable/contentdiscard" 
      android:contentDescription="Discard Picture"/> 

    </LinearLayout> 

Voici ma méthode onCreate pour définir l'alpha à 0 sur loadup que lorsque vous avez terminé en XML, il ne fonctionne pas ...

AlphaAnimation alpha = new AlphaAnimation(0.0F, 0.0F); 
    alpha.setDuration(0); // Make animation instant 
    alpha.setFillAfter(true); // Tell it to persist after the animation ends 
    // And then on your layout 
    this._photoOptionsBar.startAnimation(alpha); 

Et puis quand je veux montrer que je appelle le suivant.

public void showOptions() { 
     AlphaAnimation alpha = new AlphaAnimation(0.0F, 1.0F); 
     alpha.setDuration(PhotoDisplayFragment.FADE_DURATION); // Make animation instant 
     alpha.setFillAfter(true); 
     this._photoOptionsBar.startAnimation(alpha); 
     this._optionsShowing = true; 
} 

Quand je le charger en sandwich IceCream le LinearLayout est là parce que vous pouvez cliquer sur les boutons et exécute leur fonction, et les fonctions de montrer sont appelés mais je ne peux pas le voir!

Toute aide serait grande

Répondre

6

Le problème est avec android:alpha=0 dans la mise en page linéaire. Pour que les choses fonctionnent, vous devez définir la propriété de visibilité sur invisible dans la mise en page xml. Et avant de commencer l'animation alpha appelez setVisibility(View.VISIBLE)

+0

Vous étiez correct avec l'endroit où le problème était, mais le réglage à 1 dans le fichier xml fait le reste fonctionne bien. – StuStirling

+0

Yea ne pouvait pas à cause de la minuterie. – StuStirling

2

J'ai eu exactement le même problème.

Il semble qu'il existe deux propriétés alpha distinctes. AlphaAnimation change un, et android:alpha change l'autre. Les deux propriétés sont utilisées sur ICS, mais android:alpha est ignoré pre-ICS.

Donc, si vous définissez android:alpha="0" et utilisez AlphaAnimation pour faire l'animation, pré-ICS cela fonctionnera bien, puisque android:alpha est ignoré. Sur ICS, la vue sera toujours invisible car AlphaAnimation ne change pas android:alpha de 0. Par conséquent, la solution consiste simplement à supprimer la ligne android:alpha="0". Je ne suis pas sûr à 100% à ce sujet, mais c'est comme ça que ça semble se comporter. Je pense aussi que les deux alphas fonctionnent d'une manière légèrement différente. Certes, si vous changez l'alpha d'un ImageView avec une image semi-transparente, il semble bien pire avec AlphaAnimation que android:alpha. Mais vous ne pouvez pas faire grand chose à ce sujet.

Questions connexes