2016-03-28 4 views
2

QuickPicのアニメーションと同様のアニメーションを実現したい。 RecyclerViewのコンテンツを表示すると、すべてのアイテムが1つの原点(すべてのアイテムで同じ)から開始してターゲット位置にアニメーションされます。RecyclerView - populateアニメーション - >すべての要素を1つの原点からターゲット位置に移動する

どのように私がこのような人口アニメーションを作成できるか知っていますか?

+0

「populate animation」は行っていないと思います。彼らは何とかImages GridViewの断片を保持しており、画像であらかじめ埋め込まれた断片全体に対して 'scale and zoom'アニメーションを行っています。アプリのキャッシュをクリアしてもう一度やり直すと、最初と二度目のフォルダに入ったときを注意深く監視すると表示されます。 – MKJParekh

+0

私はRecyclerViewのitemAnimatorだと思います。 –

答えて

3

原点の座標を(x, y)とします。その後、我々は、このコードで自分の目標位置に、この時点からすべてのビューをアニメーション化することができます

recycler.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
    @Override 
    public void onLayoutChange(final View view, 
     final int left, final int top, final int right, final int bottom, 
     final int oldLeft, final int oldTop, final int oldRight, final int oldBottom) { 
    recycler.removeOnLayoutChangeListener(this); 
    for (int i = 0, count = recycler.getChildCount(); i < count; ++i) { 
     final View child = recycler.getChildAt(i); 
     child.setTranslationX(x - child.getLeft()); 
     child.setTranslationY(y - child.getTop()); 
     child.animate() 
      .translationX(0f) 
      .translationY(0f) 
      .setStartDelay(5 * i * i) 
      .setDuration(DURATION) 
      .withLayer() 
      .start(); 
    } 
    } 
}); 

ここでは、原点でRecyclerViewのすべての子を配置し、その目標位置にそれらをアニメーション化。子どもが作成され、その位置が計算されるように、RecyclerViewレイアウトの後にすべてのアニメーションを開始します。

5 * i * iに設定されたアニメーション遅延は、遅延の計算方法の一例に過ぎません。この式を必要なものに変更するか、必要がない場合は遅延を削除することができます。

+0

これは非常に有望で、とても良いアイデアです。私は今日後でそれを試してみる... – prom85

+0

これは私が本当に働くことができる何か、それは私が必要なアイデアです。どうもありがとうございました。アイテムを設定し、同じリスナーで 'notifyDataSetChanged'を呼び出した後でも動作します... – prom85

+0

私はまだ1つの問題を抱えています:どのようにアニメーション中にアニメーションの子供のz順序を制御するのですか?アニメーション中にリサイクルビューの順序を反映させるためにzオーダーを持たせたい、つまり、最初のアイテムは2番目のもののようにするなど...現在は逆です... zを設定することでこれを変更できますそれに応じてアニメーションを開始する前に、私はどのようにアンドロイドAPI <21でそれを行うだろうか? – prom85

関連する問題