2017-10-16 6 views
1

J'utilise une animation pour LinearLayout, mais après avoir montré les données de la mise en page pour la deuxième fois, son contenu n'est pas affiché.L'animation LinearLayout n'affiche pas les données depuis la mise en page après la deuxième utilisation

Mon XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <android.support.v7.widget.CardView 
      android:id="@+id/invoiceCardView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="5dp"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical" 
       android:paddingBottom="5dp"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <LinearLayout 
         android:layout_width="0dp" 
         android:layout_height="match_parent" 
         android:layout_weight="0.1" 
         android:gravity="center_vertical" 
         android:orientation="vertical"> 

         <com.rey.material.widget.CheckBox 
          android:id="@+id/selectInvoice" 
          style="@style/Material.Drawable.CheckBox" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" /> 
        </LinearLayout> 

        <LinearLayout 
         android:layout_width="0dp" 
         android:layout_height="wrap_content" 
         android:layout_weight="0.33" 
         android:orientation="vertical"> 

         <LinearLayout 
          android:layout_width="match_parent" 
          android:layout_height="match_parent" 
          android:orientation="horizontal"> 

          <TextView 
           android:id="@+id/invoiceId" 
           android:layout_width="match_parent" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:text="#00000003" 
           android:textColor="#5d9cec" 
           android:textSize="18sp" /> 
         </LinearLayout> 

         <LinearLayout 
          android:layout_width="match_parent" 
          android:layout_height="match_parent" 
          android:orientation="horizontal"> 

          <TextView 
           android:id="@+id/invoiceStatus" 
           android:layout_width="match_parent" 
           android:layout_height="wrap_content" 
           android:layout_weight="0.37" 
           android:background="#26C6DA" 
           android:gravity="center" 
           android:text="active" 
           android:textColor="@android:color/white" 
           android:textStyle="bold" /> 

         </LinearLayout> 

        </LinearLayout> 

        <LinearLayout 
         android:layout_width="0dp" 
         android:layout_height="wrap_content" 
         android:layout_gravity="center" 
         android:layout_weight="0.25" 
         android:gravity="center_vertical" 
         android:orientation="vertical"> 

         <TextView 
          android:id="@+id/invoiceAmount" 
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          android:gravity="center" 
          android:text="$ 222,064.00" 
          android:textSize="16sp" 
          android:textStyle="bold" /> 
        </LinearLayout> 

        <LinearLayout 
         android:layout_width="0dp" 
         android:layout_height="match_parent" 
         android:layout_gravity="center" 
         android:layout_weight="0.1" 
         android:gravity="center_vertical" 
         android:orientation="vertical"> 

         <com.mikepenz.iconics.view.IconicsImageView 
          android:id="@+id/showDetailsArrow" 
          android:layout_width="20dp" 
          android:layout_height="20dp" 
          android:layout_gravity="center" 
          app:iiv_color="@color/colorGrey" 
          app:iiv_icon="faw-angle-down" /> 
        </LinearLayout> 
       </LinearLayout> 

       <LinearLayout 
        android:id="@+id/invoiceDetails" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" 
        android:visibility="gone"> 

        <TableLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_marginLeft="10dp" 
         android:layout_marginRight="10dp"> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent" 
          android:layout_marginTop="5dp" 
          android:background="@color/appBlack"> 

          <TextView 
           android:id="@+id/textView12" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:text="Details" 
           android:textColor="@android:color/white" 
           android:textSize="16sp" 
           android:textStyle="bold" /> 
         </TableRow> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent"> 

          <TextView 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="left" 
           android:paddingBottom="5dp" 
           android:paddingTop="5dp" 
           android:text="Date Sent" 
           android:textColor="@color/colorGrey" /> 

          <TextView 
           android:id="@+id/dateSent" 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="right" 
           android:text="7/27/2017" 
           android:textStyle="bold" /> 

         </TableRow> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent"> 

          <TextView 
           android:id="@+id/textView18" 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="left" 
           android:paddingBottom="5dp" 
           android:paddingTop="5dp" 
           android:text="Date Paid" 
           android:textColor="@color/colorGrey" /> 

          <TextView 
           android:id="@+id/datePaid" 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="right" 
           android:text="7/27/2017" 
           android:textStyle="bold" /> 
         </TableRow> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent"> 

          <TextView 
           android:id="@+id/textView21" 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="left" 
           android:paddingBottom="5dp" 
           android:paddingTop="5dp" 
           android:text="Days Past Due" 
           android:textColor="@color/colorGrey" /> 

          <LinearLayout 
           android:layout_width="0dp" 
           android:layout_height="match_parent" 
           android:layout_weight="1" 
           android:gravity="right|center_vertical" 
           android:orientation="vertical"> 

           <TextView 
            android:id="@+id/daysPastDue" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:background="#f00000" 
            android:paddingLeft="10dp" 
            android:paddingRight="10dp" 
            android:text="70 days" 
            android:textColor="@android:color/white" 
            android:textStyle="bold" /> 
          </LinearLayout> 

         </TableRow> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent"> 

          <TextView 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="left" 
           android:paddingBottom="5dp" 
           android:paddingTop="5dp" 
           android:text="@string/name" 
           android:textColor="@color/colorGrey" /> 

          <TextView 
           android:id="@+id/name" 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="right" 
           android:text="Test" 
           android:textStyle="bold" /> 
         </TableRow> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent"> 

          <TextView 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="left" 
           android:paddingBottom="5dp" 
           android:paddingTop="5dp" 
           android:text="Email" 
           android:textColor="@color/colorGrey" /> 

          <HorizontalScrollView 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_gravity="center_vertical|center_horizontal" 
           android:layout_weight="1" 
           android:fillViewport="true"> 

           <LinearLayout 
            android:layout_width="wrap_content" 
            android:layout_height="match_parent" 
            android:orientation="horizontal"> 

            <TextView 
             android:id="@+id/email" 
             android:layout_width="0dp" 
             android:layout_height="wrap_content" 
             android:layout_weight="1" 
             android:gravity="right" 
             android:text="[email protected]" 
             android:textStyle="bold" /> 
           </LinearLayout> 
          </HorizontalScrollView> 
         </TableRow> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent"> 

          <TextView 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="left" 
           android:paddingBottom="5dp" 
           android:paddingTop="5dp" 
           android:text="Balance" 
           android:textColor="@color/colorGrey" /> 

          <TextView 
           android:id="@+id/balance" 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="right" 
           android:text="$ 420.00" 
           android:textStyle="bold" /> 
         </TableRow> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent"> 

          <TextView 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="left" 
           android:paddingBottom="5dp" 
           android:paddingTop="5dp" 
           android:text="Preview" 
           android:textColor="@color/colorGrey" /> 

          <TextView 
           android:id="@+id/balance" 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:gravity="right" 
           android:text="View" 
           android:textColor="#5d9cec" /> 
         </TableRow> 

         <TableRow 
          android:layout_width="match_parent" 
          android:layout_height="match_parent" 
          android:layout_marginTop="5dp" 
          android:gravity="center_vertical"> 

          <TextView 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="0.5" 
           android:gravity="left" 
           android:paddingBottom="5dp" 
           android:paddingTop="5dp" 
           android:text="Actions" 
           android:textColor="@color/colorGrey" /> 

          <fr.ganfra.materialspinner.MaterialSpinner 
           android:id="@+id/actions" 
           android:layout_width="0dp" 
           android:layout_height="wrap_content" 
           android:layout_weight="1" 
           android:textColor="@color/colorGrey" 
           android:textStyle="bold" 
           app:ms_arrowColor="@color/colorGrey" 
           app:ms_enableFloatingLabel="false" 
           app:ms_hint="Select Action" 
           app:ms_hintColor="@color/colorGrey" 
           app:ms_hintTextSize="14sp" /> 

         </TableRow> 

        </TableLayout> 
       </LinearLayout> 

      </LinearLayout> 

     </android.support.v7.widget.CardView> 

    </LinearLayout> 

</LinearLayout> 

Java:

//variable declaration  
private boolean showRowDetails = false; 
showRowDetails = !showRowDetails; 
final LinearLayout invoiceDetails = (LinearLayout) view.findViewById(R.id.invoiceDetails); 
invoiceDetails.setAlpha(0.0f); 
IconicsImageView showDetailsArrow = (IconicsImageView) view.findViewById(R.id.showDetailsArrow); 
if(showRowDetails){ 
    invoiceDetails.animate() 
      .translationY(invoiceDetails.getHeight()) 
      .alpha(1.0f) 
      .setDuration(800) 
      .setListener(new AnimatorListenerAdapter() { 
       @Override 
       public void onAnimationEnd(Animator animation) { 
        super.onAnimationEnd(animation); 
        invoiceDetails.setVisibility(View.VISIBLE); 
       } 
      }); 
    showDetailsArrow.setImageDrawable(
      new IconicsDrawable(context) 
        .icon("faw-angle-up") 
        .color(ContextCompat.getColor(context, R.color.colorGrey)) 
    ); 
} 
else { 
    invoiceDetails.animate() 
      .translationY(0) 
      .alpha(0.0f) 
      .setDuration(800) 
      .setListener(new AnimatorListenerAdapter() { 
       @Override 
       public void onAnimationEnd(Animator animation) { 
        super.onAnimationEnd(animation); 
        invoiceDetails.setVisibility(View.GONE); 
       } 
      }); 
    showDetailsArrow.setImageDrawable(
      new IconicsDrawable(context) 
        .icon("faw-angle-down") 
        .color(ContextCompat.getColor(context, R.color.colorGrey)) 
    ); 
} 

données cachées: hidden data

données sont publiées pour la première fois:

enter image description here

données montré la deuxième fois après l'effondrement de la vue:

enter image description here

Toute idée pourquoi est-ce qui se passe? Merci à tous pour votre temps!

Répondre

1

J'ai déjà rencontré des problèmes similaires avant que les animations ne "remplissent" correctement les états avant et après de l'animation sur le View. Je ne sais pas si cela va résoudre vous émettez exactement, mais essayez de mettre en œuvre une solution similaire à ceci:

L'idée est que vous devez définir le pré-état du View avant de commencer l'animateur, puis dans le onAnimationEnd(Animator) définir l'état de l'animation sur l'objet. Ainsi, par exemple, dans votre show animation (quand showRowDetails est true), essayez ceci:

invoiceDetails.setAlpha(0.0f); 
invoiceDetails.setTranslationY(0); 
invoiceDetails.setVisibility(View.VISIBLE); 
final int height = invoiceDetails.getHeight(); 
invoiceDetails.animate() 
    .translationY(height) 
    .alpha(1.0f) 
    .setDuration(800) 
    .setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      invoiceDetails.setAlpha(1.0f); 
      invoiceDetails.setTranslationY(height); 
     } 
    }).start(); 

avis quelques petites choses ici:

  1. Déplacer setVisibility(View.VISIBLE) avant de commencer l'animation parce que vous voulez que le View à déjà être visible afin que vous puissiez voir l'animation qui se passe réellement.
  2. Définissez le pré-état View avant de démarrer l'animation.
  3. Définissez l'état d'affichage View dans onAnimationEnd().
  4. Supprimer super.onAnimationEnd(animator), ce n'est pas nécessaire.

J'espère que cette explication est logique. Ma solution exacte pourrait ne pas fonctionner immédiatement, mais l'idée devrait être la même. Vous aurez besoin de jouer et voir si cela fonctionne pour vous. J'espère que cela t'aides!

+0

Vous avez oublié d'appeler 'start()' à la fin. –

+0

@Brian Il est très étrange, même si j'ai fait ces changements maintenant sur le deuxième robinet, je peux voir le contenu se glisser hors de la disposition linéaire et disparaître – Alphonse

+0

Ah j'ai aussi vu ce problème similaire avant, jamais compris pourquoi Android les animations sont parfois un mal de tête! Avez-vous également mis en œuvre les modifications pré-état et post-changement de votre animation cachée? – Brian