ソースを参照

Optimize code.

zhpanvip 4 年 前
コミット
2f83fe38da

BIN
app/release/app-release.apk


+ 2 - 0
app/src/main/java/com/example/zhpan/circleviewpager/fragment/OthersFragment.java

@@ -100,6 +100,8 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
                 case R.id.rb_vector_drawable:
                     setDrawableIndicator(getVectorDrawableIndicator());
                     break;
+                default:
+                    break;
             }
         });
         radioButton.performClick();

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

@@ -46,6 +46,7 @@ import static com.zhpan.bannerview.constants.IndicatorGravity.END;
 import static com.zhpan.bannerview.constants.IndicatorGravity.START;
 import static com.zhpan.bannerview.manager.BannerOptions.DEFAULT_REVEAL_WIDTH;
 import static com.zhpan.bannerview.transform.ScaleInTransformer.DEFAULT_MIN_SCALE;
+import static com.zhpan.bannerview.utils.BannerUtils.getOriginalPosition;
 
 /**
  * Created by zhpan on 2017/3/28.
@@ -113,7 +114,8 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
             super.onPageSelected(position);
             int size = mBannerPagerAdapter.getListSize();
             currentPosition = BannerUtils.getRealPosition(isCanLoop(), position, size);
-            if (size > 0 && isCanLoop() && position == 0 || position == MAX_VALUE - 1) {
+            boolean needResetCurrentItem = size > 0 && isCanLoop() && (position == 0 || position == MAX_VALUE - 1);
+            if (needResetCurrentItem) {
                 resetCurrentItem(currentPosition);
             }
             if (onPageChangeCallback != null) {
@@ -353,11 +355,13 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
         if (bannerOptions.getScrollDuration() != 0) {
             ScrollDurationManger.reflectLayoutManager(mViewPager, bannerOptions.getScrollDuration());
         }
-        if (bannerOptions.getRightRevealWidth() != DEFAULT_REVEAL_WIDTH || bannerOptions.getLeftRevealWidth() != DEFAULT_REVEAL_WIDTH) {
+        int rightRevealWidth = bannerOptions.getRightRevealWidth();
+        int leftRevealWidth = bannerOptions.getLeftRevealWidth();
+        if (leftRevealWidth != DEFAULT_REVEAL_WIDTH || rightRevealWidth != DEFAULT_REVEAL_WIDTH) {
             RecyclerView recyclerView = (RecyclerView) mViewPager.getChildAt(0);
             int orientation = bannerOptions.getOrientation();
-            int padding2 = bannerOptions.getPageMargin() + bannerOptions.getRightRevealWidth();
-            int padding1 = bannerOptions.getPageMargin() + bannerOptions.getLeftRevealWidth();
+            int padding2 = bannerOptions.getPageMargin() + rightRevealWidth;
+            int padding1 = bannerOptions.getPageMargin() + leftRevealWidth;
             if (orientation == ViewPager2.ORIENTATION_HORIZONTAL) {
                 recyclerView.setPadding(padding1, 0, padding2, 0);
             } else if (orientation == ViewPager2.ORIENTATION_VERTICAL) {
@@ -370,7 +374,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
         mBannerPagerAdapter.setPageClickListener(mOnPageClickListener);
         mViewPager.setAdapter(mBannerPagerAdapter);
         if (list.size() > 1 && isCanLoop()) {
-            mViewPager.setCurrentItem(MAX_VALUE / 2 - ((MAX_VALUE / 2) % list.size()) + 1, false);
+            mViewPager.setCurrentItem(getOriginalPosition(list.size()), false);
         }
         mViewPager.unregisterOnPageChangeCallback(mOnPageChangeCallback);
         mViewPager.registerOnPageChangeCallback(mOnPageChangeCallback);
@@ -408,7 +412,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
 
     private void resetCurrentItem(int item) {
         if (isCanLoop() && mBannerPagerAdapter.getListSize() > 1) {
-            mViewPager.setCurrentItem(MAX_VALUE / 2 - ((MAX_VALUE / 2) % mBannerPagerAdapter.getListSize()) + 1 + item, false);
+            mViewPager.setCurrentItem(getOriginalPosition(mBannerPagerAdapter.getListSize()) + item, false);
         } else {
             mViewPager.setCurrentItem(item, false);
         }

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

@@ -18,7 +18,7 @@ import java.util.List;
 public abstract class BaseBannerAdapter<T, VH extends BaseViewHolder<T>> extends RecyclerView.Adapter<VH> {
     protected List<T> mList = new ArrayList<>();
     private boolean isCanLoop;
-    static final int MAX_VALUE = 500;
+    public static final int MAX_VALUE = 500;
     private BannerViewPager.OnPageClickListener mPageClickListener;
 
     @NonNull

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

@@ -3,6 +3,10 @@ package com.zhpan.bannerview.utils;
 import android.content.res.Resources;
 import android.util.Log;
 
+import com.zhpan.bannerview.BaseBannerAdapter;
+
+import static com.zhpan.bannerview.BaseBannerAdapter.MAX_VALUE;
+
 /**
  * <pre>
  *   Created by zhangpan on 2019-08-14.
@@ -13,6 +17,8 @@ public class BannerUtils {
 
     private static boolean debugMode = false;
 
+    private static final String TAG = "BVP";
+
     public static void setDebugMode(boolean isDebug) {
         debugMode = isDebug;
     }
@@ -33,12 +39,32 @@ public class BannerUtils {
 
     public static void log(String msg) {
         if (isDebugMode()) {
-            Log.e("BannerView", msg);
+            Log.e(TAG, msg);
         }
     }
 
+    /**
+     * 在循环模式下{@link com.zhpan.bannerview.BannerViewPager}会初始化一个item为
+     * {@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) {
-        if (pageSize == 0) return 0;
+        if (pageSize == 0) {
+            return 0;
+        }
         return isCanLoop ? (position - 1 + pageSize) % pageSize : (position + pageSize) % pageSize;
     }
+
+    /**
+     * @param pageSize 轮播图页面数
+     * @return 轮播图初始位置
+     */
+    public static int getOriginalPosition(int pageSize) {
+        return MAX_VALUE / 2 - ((MAX_VALUE / 2) % pageSize) + 1;
+    }
 }