ソースを参照

Optimize getRealPosition method

zhpanvip 4 年 前
コミット
e0c8ed4c19

+ 2 - 2
app/build.gradle

@@ -80,6 +80,6 @@ dependencies {
     implementation 'com.google.android.material:material:1.2.1'
     implementation 'com.blankj:utilcodex:1.30.5'
     implementation 'com.airbnb.android:lottie:3.4.1'
-//    implementation 'com.github.zhpanvip:BannerViewPager:3.4.0'
-    implementation project(path: ':bannerview')
+    implementation 'com.github.zhpanvip:BannerViewPager:3.4.0'
+//    implementation project(path: ':bannerview')
 }

+ 6 - 7
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -246,7 +246,7 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
     private void pageSelected(int position) {
         int size = mBannerPagerAdapter.getListSize();
         boolean canLoop = mBannerManager.getBannerOptions().isCanLoop();
-        currentPosition = BannerUtils.getRealPosition(canLoop, position, size);
+        currentPosition = BannerUtils.getRealPosition(position, size);
         boolean needResetCurrentItem = size > 0 && canLoop && (position == 0 || position == MAX_VALUE - 1);
         if (needResetCurrentItem) {
             resetCurrentItem(currentPosition);
@@ -262,7 +262,7 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
     private void pageScrolled(int position, float positionOffset, int positionOffsetPixels) {
         int listSize = mBannerPagerAdapter.getListSize();
         boolean canLoop = mBannerManager.getBannerOptions().isCanLoop();
-        int realPosition = BannerUtils.getRealPosition(canLoop, position, listSize);
+        int realPosition = BannerUtils.getRealPosition(position, listSize);
         if (listSize > 0) {
             if (onPageChangeCallback != null) {
                 onPageChangeCallback.onPageScrolled(realPosition, positionOffset, positionOffsetPixels);
@@ -411,8 +411,7 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
         setIndicatorValues(data);
         boolean canLoop = mBannerManager.getBannerOptions().isCanLoop();
         mBannerManager.getBannerOptions().getIndicatorOptions()
-                .setCurrentPosition(BannerUtils.getRealPosition(canLoop,
-                        mViewPager.getCurrentItem(), data.size()));
+                .setCurrentPosition(BannerUtils.getRealPosition(mViewPager.getCurrentItem(), data.size()));
         mIndicatorView.notifyDataChanged();
     }
 
@@ -789,7 +788,7 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
             int pageSize = mBannerPagerAdapter.getListSize();
             int currentItem = mViewPager.getCurrentItem();
             boolean canLoop = mBannerManager.getBannerOptions().isCanLoop();
-            int realPosition = BannerUtils.getRealPosition(canLoop, currentItem, pageSize);
+            int realPosition = BannerUtils.getRealPosition(currentItem, pageSize);
             if (currentItem != index) {
                 if (index == 0 && realPosition == pageSize - 1) {
                     mViewPager.addItemDecoration(decor, currentItem + 1);
@@ -885,7 +884,7 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
             int currentItem = mViewPager.getCurrentItem();
             int pageSize = mBannerPagerAdapter.getListSize();
             boolean canLoop = mBannerManager.getBannerOptions().isCanLoop();
-            int realPosition = BannerUtils.getRealPosition(canLoop, currentItem, mBannerPagerAdapter.getListSize());
+            int realPosition = BannerUtils.getRealPosition(currentItem, mBannerPagerAdapter.getListSize());
             if (currentItem != item) {
                 if (item == 0 && realPosition == pageSize - 1) {
                     mViewPager.setCurrentItem(currentItem + 1);
@@ -911,7 +910,7 @@ public class BannerViewPager<T> extends RelativeLayout implements LifecycleObser
             int pageSize = mBannerPagerAdapter.getListSize();
             int currentItem = mViewPager.getCurrentItem();
             boolean canLoop = mBannerManager.getBannerOptions().isCanLoop();
-            int realPosition = BannerUtils.getRealPosition(canLoop, currentItem, pageSize);
+            int realPosition = BannerUtils.getRealPosition(currentItem, pageSize);
             if (currentItem != item) {
                 if (item == 0 && realPosition == pageSize - 1) {
                     mViewPager.setCurrentItem(currentItem + 1, smoothScroll);

+ 3 - 3
bannerview/src/main/java/com/zhpan/bannerview/BaseBannerAdapter.java

@@ -31,12 +31,12 @@ public abstract class BaseBannerAdapter<T> extends RecyclerView.Adapter<BaseView
 
     @Override
     public final void onBindViewHolder(@NonNull BaseViewHolder<T> holder, final int position) {
-        int realPosition = BannerUtils.getRealPosition(isCanLoop, position, getListSize());
+        int realPosition = BannerUtils.getRealPosition(position, getListSize());
         holder.itemView.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View clickedView) {
                 if (mPageClickListener != null) {
-                    mPageClickListener.onPageClick(clickedView, BannerUtils.getRealPosition(isCanLoop, position, getListSize()));
+                    mPageClickListener.onPageClick(clickedView, BannerUtils.getRealPosition(position, getListSize()));
                 }
             }
         });
@@ -45,7 +45,7 @@ public abstract class BaseBannerAdapter<T> extends RecyclerView.Adapter<BaseView
 
     @Override
     public final int getItemViewType(int position) {
-        int realPosition = BannerUtils.getRealPosition(isCanLoop, position, getListSize());
+        int realPosition = BannerUtils.getRealPosition(position, getListSize());
         return getViewType(realPosition);
     }
 

+ 2 - 3
bannerview/src/main/java/com/zhpan/bannerview/utils/BannerUtils.java

@@ -48,16 +48,15 @@ public class BannerUtils {
      * {@link BaseBannerAdapter#MAX_VALUE}的ViewPager2,并将当前position设置为ViewPager2
      * 的中间位置,因此,此时的position需要通过该方法进行转换为真实的position。
      *
-     * @param isCanLoop 是否开启了循环轮播
      * @param position  当前position
      * @param pageSize  轮播图页面数
      * @return 真实的position
      */
-    public static int getRealPosition(boolean isCanLoop, int position, int pageSize) {
+    public static int getRealPosition(int position, int pageSize) {
         if (pageSize == 0) {
             return 0;
         }
-        return isCanLoop ? (position + pageSize) % pageSize : (position + pageSize) % pageSize;
+        return (position + pageSize) % pageSize;
     }
 
     /**