最近のアンドロイドのステータスバーに似たレイアウトを作っています。下にスクロールする閉じるツールバーを表示しないで表示
私は、コンテナ内の2 Views
を持っています。 ViewPager
およびRecyclerView
。 デフォルトの動作では、RecyclerView
をスクロールすると、ViewPager
のサイズを小さくしたい、その逆の設定をします。
ロジック:
viewPagerMaxHeight = 200;
if scrollTop
is ViewPager.height > viewPagerMaxHeight?
YES: Prevent Scroll and Decrease ViewPager size apropriatry
No: Scroll RecyclerView
if scrollBottom
did we scroll to position 0?
YES: Start increasing ViewPager size
No: Scroll RecyclerView
ほとんどのノート: - RecyclerView
は、様々なサイズの項目が含まれています。 - アイテムが削除されて追加されることがある - 単純なRecyclerViewで、 ではなく、互いに崩壊する通知に似ています。
自分でロジックのほとんどを構築できますが、スクロールされた方向と量を返すRecyclerView
のリスナーを正しく作成できませんでした。私は、私はRecycleView
ためのパディングを設定し、最初の項目にNestedScrollView
をスクロールしていgithub
v.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
Log.e("scrollY", ""+scrollY);
Log.e("oldScrollY", ""+oldScrollY);
Log.e("currentHeight", ""+currentHeight);
if(scrollY == 200) {
Log.e("==200", "JU");
} else if (scrollY < 200) {
Log.e("<200", ""+currentHeight);
if(currentHeight < fullHeight) {
Log.e("current<full", Integer.toString(deltaScroll));
deltaScroll = oldScrollY - scrollY;
currentHeight = currentHeight + deltaScroll;
if(currentHeight > fullHeight) {
currentHeight = fullHeight;
}
ku.getLayoutParams().height = currentHeight;
ku.requestLayout();
}
v.scrollTo(0, 200);
} else if (scrollY > oldScrollY) {
Log.e("Scroll DOWN", "" + Integer.toString(scrollY));
deltaScroll = scrollY - oldScrollY;
currentHeight = currentHeight - deltaScroll;
if(currentHeight > minHeight) {
ku.getLayoutParams().height = currentHeight;
ku.requestLayout();
v.scrollTo(0, 200);
} else {
currentHeight = minHeight;
ku.getLayoutParams().height = minHeight;
ku.requestLayout();
}
}
}
});
に例を行った
: はスクロールからRecyclerView
を防止することがボーナス
EDITですパディングは表示されません。これにより、すでにTOPにいてもTOPをスクロールできます。
すべてがうまくいくように見えますが、ゆっくりとスクロールするとスクロールが「不安定」になることがわかります(スクロールしても十分には起こりません)。 NestedScrollView
自体が高さが変わってしまい、たとえばスクロールアップ中にスクロールダウンが発生するため、私の推測は起こっていると思います。あなたの現在のコードによると
は、しばしば「びくびくのパフォーマンスにつながります。 ViewPagerを使って何を使っているのか詳しく教えていただけますか?可能であればレイアウトXMLを共有してください。 –
コーディネーターのレイアウトを見てください – Rainmaker
@AbhishekSinghすべての私の意見が入っているgithubがあります – CBeTJlu4ok