2017-09-07 4 views
1

Je veux construire une application qui utilise recycler vue et cardview comme l'image ci-dessous et lorsque l'utilisation cliquez sur l'élément, il va se développer et lorsque l'utilisateur cliquez sur autre élément que cet élément dépensera cet élément dépensé s'effondrera. Ex: Je clique sur l'article 2 le numéro d'article 2 dépensera alors je clique sur le numéro d'article 4 de sorte que le numéro d'article 2 s'effondrera et le numéro d'article 4 se déploiera.comment dépenser et réduire la vue des cartes dans RecyclerView dans android lorsque vous cliquez sur un autre élément

enter image description here

Merci beaucoup pour votre réponse!

Répondre

2

Vous pouvez utiliser la vue Recycleur extensible pour cela (disponible sur github). Si vous voulez utiliser la vue Recycleur, vous pouvez développer et réduire la vue avec animation comme une bascule. Consultez le code ci-dessous:

public static void expandCard(final View v) { 
    v.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    final int targetHeight = v.getMeasuredHeight(); 
    v.getLayoutParams().height = 1; 
    v.setVisibility(View.VISIBLE); 
    Animation a = new Animation() 
    { 
     @Override 
     protected void applyTransformation(float interpolatedTime, Transformation t) { 
      v.getLayoutParams().height = interpolatedTime == 1 
        ? ViewGroup.LayoutParams.WRAP_CONTENT 
        : (int)(targetHeight * interpolatedTime); 
      v.requestLayout(); 
     } 
     @Override 
     public boolean willChangeBounds() { 
      return true; 
     } 
    }; 
    a.setDuration(((int)(targetHeight/v.getContext().getResources().getDisplayMetrics().density))*6); 
    v.startAnimation(a); 
} 

public static void collapseCard(final View v) { 
    final int initialHeight = v.getMeasuredHeight(); 
    Animation a = new Animation() 
    { 
     @Override 
     protected void applyTransformation(float interpolatedTime, Transformation t) { 
      if(interpolatedTime == 1){ 
       v.setVisibility(View.GONE); 
      }else{ 
       v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); 
       v.requestLayout(); 
      } 
     } 
     @Override 
     public boolean willChangeBounds() { 
      return true; 
     } 
    }; 
    a.setDuration(((int)(initialHeight/v.getContext().getResources().getDisplayMetrics().density))*6); 
    v.startAnimation(a); 
}