2014-07-04 10 views
7

Ho un LinearLayout, per il quale applico android:animateLayoutChanges="true" nella genitrice LinearLayout. Quando l'utente preme un interruttore, i LinearLayout "crolli" (I impostare la visibilità della visualizzazione come LinearLayout.GONE programmazione, e quando scattano nuovamente, si espande impostando programmazione la visibilità posteriore ad LinearLayout.VISIBLE.Animazione di layout utilizzando l'attributo "animateLayoutChanges" in XML

L'animazione di esso collasso e l'espansione funziona correttamente.

Tuttavia, tutti gli elementi al di sotto del pieghevole/espandibile LinearLayout scatto torna prima che l'animazione del crollo è completo. le voci che stanno schioccando schiena non sono all'interno del genitore che ha animateLayoutChanges insieme a true e non penso che ci sia modo di metterli al suo interno.

Qui è la mia gerarchia di layout (non ho menzionato gli attributi di essere breve):

<!-- Top most LinearLayout--> 
<LinearLayout> 

    <!-- LinearLayout containing android:animateLayoutChanges="true"--> 
    <LinearLayout> 

     <!-- RelativeLayout containing button to toggle LinearLayout visibility below--> 
     <RelativeLayout> 
     </RelativeLayout> 

     <!-- LinearLayout that has its visibility toggled --> 
     <LinearLayout> 
     </LinearLayout> 

    </LinearLayout> 

</LinearLayout> 

L'intero layout è inserito a livello di codice in un altro LinearLayout (vedi sotto):

<LinearLayout 
    android:id="@+id/form_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <!-- This is where the previous XML layout containing the toggle-able LinearLayout 
     is inserted programmatically. --> 

    <!-- This button snaps back up to the top before the animation is complete. --> 
    <Button /> 

</LinearLayout> 

Mi rendo conto che il problema sarebbe risolto se aggiungo lo Button allo snap LinearLayout che ha animateLayoutChanges come vero. Tuttavia, questa non è un'opzione per alcune ragioni.

Quindi c'è qualche altro lavoro in giro?

risposta

0

Solo un pensiero ... Che cosa succede se si rimuove "animateLayoutChanges" dal layout incorporato e lo si aggiunge al layout principale (secondo XML)? Sospetto che ciò animerebbe tutto. Potrebbe essere necessario impostare la proprietà su true nel codice poiché si sta inserendo a livello di codice il layout.

Ecco come si fa a livello di codice Stack-overflow

Un'altra opzione sarebbe quella di utilizzare la proprietà .animate di programmazione sul pulsante che scatta di nuovo

myButton.animate().translationY(floatYposition).setDuration(300); //300 milliseconds 
1

Invece di usare animateLayoutChanges prova ad aggiungere TransitionManager.beginDelayedTransition(transitionsContainer); nella vostra metodo onClick dove transitionsContainer è padre delle visualizzazioni che devono essere animate.

Per esempio il layout genitore è è

<LinearLayout android:id="@+id/transitions_container"> 

    <!--add your widgets here--> 

</LinearLayout> 

E nel codice

final ViewGroup transitionsContainer = (ViewGroup) view.findViewById(R.id.transitions_container); 

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     TransitionManager.beginDelayedTransition(transitionsContainer); 
     // do your staff with changing children of transitionsContainer   
    } 
}); 

Verificare https://medium.com/@andkulikov/animate-all-the-things-transitions-in-android-914af5477d50 per i dettagli.

Problemi correlati