最近、カスタム スクロールの作業を開始しRecyclerView
ましたが、問題が発生しました。ヘッダーのパララックスを行ったところ、うまく機能しましたが、スクロールすると行が拡張されるようにしたかったのです。この方法recyclerView.computeVerticalScrollOffset()
では、リストの最初の 2 つの項目に対しては正常に機能する必要がありましたが、その後はバラバラになります。
これが私のコードの例です:
FrameLayout main = (FrameLayout) holder.itemView;
if (main != null) {
int height = calculateHeight(offset, (position + i));
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) main.getLayoutParams();
lp.height = height;
main.setLayoutParams(lp);
}
そのため、レイアウト内の位置とリサイクルビューのオフセットに基づいて高さを計算する関数があります。2 番目のアイテムがY == 0
オフセットに達すると、半分に低下します (つまり、1200 から 600 に低下し、その後も継続しますが、計算はすべて間違っています)。
安定したオフセット値を取得する方法、または recyclerView の位置と一致するものに変更する方法に関するアイデア。
編集:
OK、問題を順を追って説明できます。
- アダプターの位置 (0) の要素の高さは 1200 です
- 他のすべての要素のデフォルトの高さは 300 です
- ユーザーが下にスクロールし始めると、position(1) の要素が高さ 300 から 1200 に拡大し始めます
--------- ここからコードが壊れ始めます... -----------
- 新しい高さ 1200 の position(1) の要素が画面の上部に到達したとき ( のとき
getTop() == 0
)、ここでのオフセットは約 900 です。 - この同じ要素が画面から外れ始める (ユーザーが下にスクロールしている) と、トップ画面とこの要素が衝突するポイント (0,0) のオフセットが半分になるため、オフセットは 900 になるはずのときに 450 になり、それから 450 以降になりますが、position(1) にある私の要素は、本来あるべきサイズの半分しかありません...