だから今日、私はその効果をアーカイブしようとしましたRecyclerView
. できましたが、コードが多すぎるので、ここに私の github プロジェクトを貼り付けて、プロジェクトの重要なポイントをいくつか説明します。
https://github.com/kanytu/android-parallax-recyclerview
まずgetItemViewType
、RecyclerView.Adapter
クラスを確認する必要があります。このメソッドは、扱うビューのタイプを定義します。その型は に渡されonCreateViewHolder
、そこでさまざまなビューを膨らませることができます。だから私がしたことは、位置が最初のものかどうかを確認することでした。そうであれば、ヘッダーを膨らませます。そうでない場合は、通常の行を膨らませます。
ビューをクリップするも追加したCustomRelativeLayout
ので、仕切りや行がヘッダーの上に来ることに問題はありません。
この時点から、その背後にある残りのロジックを知っているようです。
最終結果は次のとおりです。
編集:
notifyItemChanged/Inserted
アダプターに何かを挿入する必要がある場合は、メソッドに 1 を追加して正しい位置を通知してください。例えば:
public void addItem(String item, int position) {
mData.add(position, item);
notifyItemInserted(position + 1); //we have to add 1 to the notification position since we don't want to mess with the header
}
私が行ったもう 1 つの重要な編集は、スクロール ロジックです。私が使用していたmCurrentOffset
システムは、アイテムを追加するとオフセットが変更されるため、アイテムの挿入では機能しませんでした。だから私がしたことは:
ViewHolder holder = findViewHolderForPosition(0);
if (holder != null)
((ParallaxRecyclerAdapter) getAdapter()).translateHeader(-holder.itemView.getTop() * 0.5f);
これをテストするために、postDelayed
Runnable を追加し、アプリを起動して、最後までスクロールし、アイテムを位置 0 に追加して、もう一度上にスクロールしました。結果は次のとおりです。
誰かが他の視差効果を探しているなら、彼らは私の他のレポをチェックすることができます:
https://github.com/kanytu/android-parallax-listview