2017-06-07 21 views
1

私のアプリにはシンプルなカードがあり、ユーザーがそれをクリックすると高さが変わります。この高さの変化は私がアニメーション化したい、高さの滑らかな変化。高さを変更する方法をアニメーション化するには

@OnClick({R.id.emptyDescription}) 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.emptyDescription: 
      if(isCardCollapsed){ 

       emptyDescription.setMinimumHeight(400); 

       cancelSaveLinear.setVisibility(View.VISIBLE); 
       editDescription.setVisibility(View.GONE); 

       isCardCollapsed = false; 
      } else { 
       emptyDescription.setMinimumHeight(100); 

       cancelSaveLinear.setVisibility(View.GONE); 
       editDescription.setVisibility(View.VISIBLE); 

       isCardCollapsed = true; 
      } 

      break; 
     case R.id.card_view: 
      break; 
    } 
} 

どうすればいいですか?

+0

新しいサイズを適用するときにレイアウトを変更する必要があります こちらをご覧くださいhttps://developer.android.com/training/animation/layout.html –

答えて

2

解決済み:

public class MainActivity extends AppCompatActivity { 

    private CardView cardView; 
    private Boolean isCollapsed = true; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     cardView = (CardView) findViewById(R.id.card_view); 

     final int originalDimension = Math.round(getResources().getDimension(R.dimen.original_card_view_height)); 
     final int newDimension = Math.round(getResources().getDimension(R.dimen.new_card_view_height)); 

     cardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(isCollapsed){ 
        TransitionManager.beginDelayedTransition(cardView, new TransitionSet() 
          .addTransition(new ChangeBounds())); 

        ViewGroup.LayoutParams params = cardView.getLayoutParams(); 
        params.height = newDimension; 
        cardView.setLayoutParams(params); 

        isCollapsed = false; 
       } else { 
        TransitionManager.beginDelayedTransition(cardView, new TransitionSet() 
          .addTransition(new ChangeBounds())); 

        ViewGroup.LayoutParams params = cardView.getLayoutParams(); 
        params.height = originalDimension; 
        cardView.setLayoutParams(params); 

        isCollapsed = true; 
       } 
      } 
     }); 
    } 
} 
1

新しいサイズを適用するときに、サンプルコードのこのdeveloper.android.com/training/animation/layout.htmlをチェックアウト

TransitionManager.beginDelayedTransition(transitionsContainer, new TransitionSet() 
    .addTransition(new ChangeBounds()) 
    .addTransition(new ChangeImageTransform())); 

ViewGroup.LayoutParams params = imageView.getLayoutParams(); 
params.height = expanded ? ViewGroup.LayoutParams.MATCH_PARENT : 
    ViewGroup.LayoutParams.WRAP_CONTENT; 
imageView.setLayoutParams(params); 

imageView.setScaleType(expanded ? ImageView.ScaleType.CENTER_CROP : 
    ImageView.ScaleType.FIT_CENTER); 

ソース https://medium.com/@andkulikov/animate-all-the-things-transitions-in-android-914af5477d50

enter image description here

レイアウト移行を設定する必要があります
+0

答えがありがとうございますが、この例はイメージですカードビューの場合 –

+0

サンプルです。あなたはすべてのビューとレイアウトのためにそれを行うことができます –

+0

ちょっと、私はもう一度試してみました!この要点のMainActivity.javaとして回答を修正してください。私はあなたの答えを正しいものとして受け入れることができます:https://gist.github.com/guuilp/85dca2bca2a89d9432674fdb37a01ca9 –

関連する問題