視圖滑動器,橫向滑動,縱向滑動,畫廊,基於RecyclerView的可滾動列表的實現,其中選中項居中,並且可以使用滑動來更改

該庫是基於RecyclerView的可滾動列表的實現,其中選中項居中,並且可以使用滑動來更改。

介紹

1. 可設置橫向滑動,縱向滑動。
2. 選中項居中。
3. 可設置無限滑動。
4. 滑動到指定item。
5. 內有滑動動畫,可設置滑動動畫時長。

先上代碼:

HorizontalView

 

示例

11           2

 

使用說明

添加jitpack庫

// build.gradle(Project:)
allprojects {
    repositories {
        ...
            maven { url 'https://www.jitpack.io' }
    }
}

添加依賴

dependencies {

   implementation 'com.github.ZLYang110:HorizontalView:1.0'
}

使用

1. 使用xml或代碼將DiscreteScrollView添加到佈局中:
2. 創建您的RecyclerView.Adapter實現。如果您不知道如何做,請參考該示例。
3. 設置適配器。
4. 大功告成!
 <com.zlylib.horizontalviewlib.HorizontalView
            android:id="@+id/item_picker"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
      />
private InfiniteScrollAdapter infiniteAdapter;

      itemPicker.setOrientation(DSVOrientation.HORIZONTAL);

       infiniteAdapter = InfiniteScrollAdapter.wrap(new CardAdapter(CardBean.getData()));
       itemPicker.setAdapter(infiniteAdapter);
       itemPicker.setItemTransitionTimeMillis(150);//設置滑動時長
       itemPicker.setItemTransformer(new ScaleTransformer.Builder()
               .setMinScale(0.8f)
               .build());
       itemPicker.addOnItemChangedListener(new HorizontalView.OnItemChangedListener<RecyclerView.ViewHolder>() {
           @Override
           public void onCurrentItemChanged(@Nullable RecyclerView.ViewHolder viewHolder, int position) {
               int positionInDataSet = infiniteAdapter.getRealPosition(position);
               onItemChanged(CardBean.getData().get(positionInDataSet));
           }
       });

API

General
scrollView.setOrientation(DSVOrientation o);  //設置視圖
scrollView.setOffscreenItems(count); //Reserve extra space equal to (childSize * count) on each side of the view
scrollView.setOverScrollEnabled(enabled); //Can also be set using android:overScrollMode xml attribute

scrollView.getCurrentItem();  //返回當前所選項目的適配器位置;如果適配器爲空,則返回-1。
scrollView.scrollToPosition(int position); //初始位置
scrollView.smoothScrollToPosition(int position); //通過動畫滾動到指定位置
scrollView.setItemTransitionTimeMillis(int millis); //同股票滾動所需時間


scrollView.setItemTransformer(new ScaleTransformer.Builder()
  .setMaxScale(1.05f)
  .setMinScale(0.8f)
  .setPivotX(Pivot.X.CENTER) // CENTER is a default one
  .setPivotY(Pivot.Y.BOTTOM) // CENTER is a default one
  .build());

滑動多個項目

要允許瀏覽多個項目,請調用:
scrollView.setSlideOnFling(true);
默認閾值設置爲2100。閾值越低,動畫越流暢。您可以通過以下方式調整閾值:
scrollView.setSlideOnFlingThreshold(value);

無限滾動

無限滾動在適配器級別實現:
InfiniteScrollAdapter wrapper = InfiniteScrollAdapter.wrap(yourAdapter);
scrollView.setAdapter(wrapper);
實例InfiniteScrollAdapter具有以下有用的方法:
int getRealItemCount();

int getRealCurrentPosition();

int getRealPosition(int position);

/*
 * 在以下用例中,您可能需要此方法:
 * int targetAdapterPosition = wrapper.getClosestPosition(targetPosition);
 * scrollView.smoothScrollTo(targetAdapterPosition);
 * 滾動數據集以達到目標位置所需的最少數量
 */
int getClosestPosition(int position); 
當前InfiniteScrollAdapter處理數據集 效率很低請放心使用.

回調狀態

滾動狀態回調

scrollView.addScrollStateChangeListener(listener);
scrollView.removeScrollStateChangeListener(listener);

public interface ScrollStateChangeListener<T extends ViewHolder> {

  void onScrollStart(T currentItemHolder, int adapterPosition); //滾動時調用
  
  void onScrollEnd(T currentItemHolder, int adapterPosition); //滾動結束時調用
  /**
   * 滾動進行時調用
   * @param scrollPosition是間隔[-1f..1f]內的一個值,它對應於currentSelectedView的位置。
   * In idle state:
   * |view1|  |currentlySelectedView|  |view2|
   * -view1 is on position -1;
   * -currentlySelectedView is on position 0;
   * -view2 is on position 1.
   * @param currentIndex-當前視圖的索引
   * @param newIndex-成爲新的當前視圖的視圖的索引
   * @param currentHolder-當前視圖的ViewHolder
   * @paramnewCurrent-成爲新當前視圖的視圖的ViewHolder
   */
  void onScroll(float scrollPosition, int currentIndex, int newIndex, @Nullable T currentHolder, @Nullable T newCurrentHolder); 
}

 

滾動回調:
scrollView.addScrollListener(listener);
scrollView.removeScrollListener(listener);

public interface ScrollListener<T extends ViewHolder> {
  //The same as ScrollStateChangeListener, but for the cases when you are interested only in onScroll()
  void onScroll(float scrollPosition, int currentIndex, int newIndex, @Nullable T currentHolder, @Nullable T newCurrentHolder);
}
當前選中回調:
scrollView.addOnItemChangedListener(listener);
scrollView.removeOnItemChangedListener(listener);

public interface OnItemChangedListener<T extends ViewHolder> {
  /**
    *如果數據集爲空,viewHolder將爲null
   */
  void onCurrentItemChanged(@Nullable T viewHolder, int adapterPosition); 
}

聯繫方式


QQ: 1833309873

E-mail: [email protected]

最後:

給個star吧!!!!!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章