2016-02-03 12 views
11

私はユーザがアイテムを選択するRecyclerViewを持っています。選択すると、特定のビューがテキストの前に表示されます(画像参照)。私はその外観をアニメ化したい。アイテムのレイアウト上のanimateLayoutChangesメカニズムで使用されるアニメーションを変更するにはどうすればよいですか?

Graphical representation

animateLayoutChangesプロパティは、ビューの外観のためのアニメーションの種類を除いて、完璧に仕事をしていません - 。それは私がそれを0から100%のサイズにスケールするにはフェード、私は「それは呼ばれています信じていますポップアップアニメーション。

animateLayoutChangesを無効にしてXMLアニメーションを使用すると動作しますが、近くのテキストはアニメーション化されなくなりました(ビューと余白のスペースに合わせてスライドする必要があります)。それはすぐに右にシフトし、アニメーションが再生されます。逆のアニメーションでは、テキストが消える前にビューが重なるため、これは悪化します。

だから私は何とかデフォルトのメカニズムと自分のアニメーションを組み合わせる必要があります。 カスタムアニメーションを掘り下げずにこれを達成する最も簡単な方法は何ですか?

答えて

21

間違った場所で多くの掘り出した後、自分自身で答えを見つけました。誰かを助けるかもしれない。

animateLayoutChangesプロパティは、LayoutTransitionのインスタンスを使用してViewGroupのジョブを実行します。

ので、アニメーションを変更するために、あなたはLayoutTransitionのインスタンスを作成することができ、あなたが変更してsetLayoutTransition()経由ViewGroupにそのインスタンスを割り当てる必要が移行のためAnimatorを設定します。

私の場合、結果は次のとおりです。LayoutTransition reference documentation

Animator scaleDown = ObjectAnimator.ofPropertyValuesHolder((Object)null, PropertyValuesHolder.ofFloat("scaleX", 1, 0), PropertyValuesHolder.ofFloat("scaleY", 1, 0)); 
scaleDown.setDuration(300); 
scaleDown.setInterpolator(new OvershootInterpolator()); 

Animator scaleUp = ObjectAnimator.ofPropertyValuesHolder((Object)null, PropertyValuesHolder.ofFloat("scaleX", 0, 1), PropertyValuesHolder.ofFloat("scaleY", 0, 1)); 
scaleUp.setDuration(300); 
scaleUp.setStartDelay(300); 
scaleUp.setInterpolator(new OvershootInterpolator()); 

LayoutTransition itemLayoutTransition = new LayoutTransition(); 
itemLayoutTransition.setAnimator(LayoutTransition.APPEARING, scaleUp); 
itemLayoutTransition.setAnimator(LayoutTransition.DISAPPEARING, scaleDown); 

ViewGroup av = (ViewGroup)v.findViewById(R.id.animated_layout); 
av.setLayoutTransition(itemLayoutTransition); 

詳細情報。

+0

このコードを完全に表示してください。私にとってはうまくいかないようです。 –

+0

これは実際Androidのためにコード化されてからしばらくしていますが、私のアーカイブからそれを掘り起こすことができました:) RecyclerView(android.support.v7ライブラリから)に慣れているなら、この要点が役立ちます:https: //gist.github.com/mrnateriver/cd988f6ca745ebad7db7cc16581069これはRecyclerView.Adapterの完全な実装ではありませんが、カスタムアニメーションの仕組みを理解しておく必要があります – mrnateriver

+0

私は通常のレイアウト(LinearLayoutなど) –

関連する問題