リサイクラービューのスクロールリスナーを追加していくつかのロジックを作成しようとしましたが、一度に1つのアイテムをスワイプすることはできません。インターネットで検索しましたが、カスタムリサイクラービューを持つサードパーティのライブラリがありました。リサイクラビューで一度に1つのアイテムスワイプを実装できますか?はいの場合、どのように教えてください?このように一度に1つの項目をスワイプします image 。
これは遅い、i know。
カスタムSnapHelperを使用して、要求されたスクロール動作を正確に取得する非常にシンプルの方法があります。
標準のSnapHelper(Android.support.v7.widget.LinearSnapHelper)を上書きして、独自のSnapHelperを作成します。
public class SnapHelperOneByOne extends LinearSnapHelper{
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY){
if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
return RecyclerView.NO_POSITION;
}
final View currentView = findSnapView(layoutManager);
if( currentView == null ){
return RecyclerView.NO_POSITION;
}
final int currentPosition = layoutManager.getPosition(currentView);
if (currentPosition == RecyclerView.NO_POSITION) {
return RecyclerView.NO_POSITION;
}
return currentPosition;
}
}
これは基本的に標準的な方法ですが、スクロール速度によって計算されるジャンプカウンターを追加しません。
高速で長くスワイプすると、次の(または前の)ビューが中央に表示されます(表示)。
ゆっくりと短くスワイプすると、現在の中央のビューはリリース後も中央にとどまります。
この答えが誰にも役立つことを願っています。
これにより、アイテム間の動きが柔らかくなります。
public class SnapHelperOneByOne extends LinearSnapHelper {
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
return RecyclerView.NO_POSITION;
}
final View currentView = findSnapView(layoutManager);
if (currentView == null) {
return RecyclerView.NO_POSITION;
}
LinearLayoutManager myLayoutManager = (LinearLayoutManager) layoutManager;
int position1 = myLayoutManager.findFirstVisibleItemPosition();
int position2 = myLayoutManager.findLastVisibleItemPosition();
int currentPosition = layoutManager.getPosition(currentView);
if (velocityX > 400) {
currentPosition = position2;
} else if (velocityX < 400) {
currentPosition = position1;
}
if (currentPosition == RecyclerView.NO_POSITION) {
return RecyclerView.NO_POSITION;
}
return currentPosition;
}
}
例:
LinearSnapHelper linearSnapHelper = new SnapHelperOneByOne();
linearSnapHelper.attachToRecyclerView(recyclerView);
https://github.com/googlesamples/Android-HorizontalPaging/
これには、画像に示したものと同様のものへのリンクがあります。他に探しているものがあるかどうかをお知らせください。関連するライブラリをリンクします。
基本的に、ViewPagerとrecyclerViewの違いは、recyclerViewでは多くのアイテムを切り替えるのに対して、ViewPagerでは多くのフラグメントまたは独立したページ自体を切り替えるということです。
あなたはこれを使用していることがわかります https://github.com/lsjwzh/RecyclerViewPager 、あなたが念頭に置いている特定のユースケースはありますか?