فهرست منبع

Move some parameters from BannerViewPager to BannerManager.

zhpanvip 4 سال پیش
والد
کامیت
636acc53c0

+ 9 - 40
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -11,8 +11,6 @@ import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
 import androidx.lifecycle.OnLifecycleEvent;
 import androidx.recyclerview.widget.RecyclerView;
-import androidx.viewpager2.widget.CompositePageTransformer;
-import androidx.viewpager2.widget.MarginPageTransformer;
 import androidx.viewpager2.widget.ViewPager2;
 
 import android.util.AttributeSet;
@@ -28,8 +26,6 @@ import com.zhpan.bannerview.constants.PageStyle;
 import com.zhpan.bannerview.manager.BannerManager;
 import com.zhpan.bannerview.manager.BannerOptions;
 import com.zhpan.bannerview.provider.ScrollDurationManger;
-import com.zhpan.bannerview.transform.OverlapPageTransformer;
-import com.zhpan.bannerview.transform.ScaleInTransformer;
 import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.bannerview.provider.ViewStyleSetter;
 import com.zhpan.indicator.IndicatorView;
@@ -86,14 +82,6 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
 
     private int startX, startY;
 
-    private CompositePageTransformer mCompositePageTransformer;
-
-    private MarginPageTransformer mMarginPageTransformer;
-
-    private ViewPager2.PageTransformer mDefaultPageTransformer;
-
-    private boolean disallowIntercept;
-
     private final ViewPager2.OnPageChangeCallback mOnPageChangeCallback = new ViewPager2.OnPageChangeCallback() {
         @Override
         public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
@@ -128,7 +116,6 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
     }
 
     private void init(Context context, AttributeSet attrs) {
-        mCompositePageTransformer = new CompositePageTransformer();
         mBannerManager = new BannerManager();
         mBannerManager.initAttrs(context, attrs);
         initView();
@@ -138,7 +125,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
         inflate(getContext(), R.layout.bvp_layout, this);
         mViewPager = findViewById(R.id.vp_main);
         mIndicatorLayout = findViewById(R.id.bvp_layout_indicator);
-        mViewPager.setPageTransformer(mCompositePageTransformer);
+        mViewPager.setPageTransformer(mBannerManager.getCompositePageTransformer());
     }
 
     @Override
@@ -184,7 +171,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
             case MotionEvent.ACTION_DOWN:
                 startX = (int) ev.getX();
                 startY = (int) ev.getY();
-                if (!disallowIntercept) {
+                if (!mBannerManager.getBannerOptions().isDisallowIntercept()) {
                     getParent().requestDisallowInterceptTouchEvent(true);
                 }
                 break;
@@ -408,16 +395,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
     }
 
     private void setMultiPageStyle(boolean overlap, float scale) {
-        if (mDefaultPageTransformer != null) {
-            mCompositePageTransformer.removeTransformer(mDefaultPageTransformer);
-        }
-        if (overlap && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            mDefaultPageTransformer = new OverlapPageTransformer(mBannerManager.getBannerOptions()
-                    .getOrientation(), scale, 0f, 1, 0);
-        } else {
-            mDefaultPageTransformer = new ScaleInTransformer(scale);
-        }
-        addPageTransformer(mDefaultPageTransformer);
+        mBannerManager.setMultiPageStyle(overlap,scale);
     }
 
 
@@ -561,27 +539,23 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
      */
     public BannerViewPager<T, VH> addPageTransformer(@Nullable ViewPager2.PageTransformer transformer) {
         if (transformer != null) {
-            mCompositePageTransformer.addTransformer(transformer);
+            mBannerManager.addTransformer(transformer);
         }
         return this;
     }
 
     public void removeTransformer(@Nullable ViewPager2.PageTransformer transformer) {
         if (transformer != null) {
-            mCompositePageTransformer.removeTransformer(transformer);
+            mBannerManager.removeTransformer(transformer);
         }
     }
 
     public void removeDefaultPageTransformer() {
-        if (mDefaultPageTransformer != null) {
-            mCompositePageTransformer.removeTransformer(mDefaultPageTransformer);
-        }
+        mBannerManager.removeDefaultPageTransformer();
     }
 
     public void removeMarginPageTransformer() {
-        if (mMarginPageTransformer != null) {
-            mCompositePageTransformer.removeTransformer(mMarginPageTransformer);
-        }
+        mBannerManager.removeMarginPageTransformer();
     }
 
     /**
@@ -590,12 +564,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
      * @param pageMargin page margin
      */
     public BannerViewPager<T, VH> setPageMargin(int pageMargin) {
-        mBannerManager.getBannerOptions().setPageMargin(pageMargin);
-        if (mMarginPageTransformer != null) {
-            mCompositePageTransformer.removeTransformer(mMarginPageTransformer);
-        }
-        mMarginPageTransformer = new MarginPageTransformer(pageMargin);
-        mCompositePageTransformer.addTransformer(mMarginPageTransformer);
+        mBannerManager.setPageMargin(pageMargin);
         return this;
     }
 
@@ -1016,7 +985,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
      * @param disallowIntercept true 禁止BVP拦截事件,false 允许BVP拦截事件
      */
     public BannerViewPager<T, VH> disallowInterceptTouchEvent(boolean disallowIntercept) {
-        this.disallowIntercept = disallowIntercept;
+        mBannerManager.getBannerOptions().setDisallowIntercept(disallowIntercept);
         return this;
     }
 

+ 58 - 0
bannerview/src/main/java/com/zhpan/bannerview/manager/BannerManager.java

@@ -1,8 +1,17 @@
 package com.zhpan.bannerview.manager;
 
 import android.content.Context;
+import android.os.Build;
 import android.util.AttributeSet;
 
+import androidx.annotation.NonNull;
+import androidx.viewpager2.widget.CompositePageTransformer;
+import androidx.viewpager2.widget.MarginPageTransformer;
+import androidx.viewpager2.widget.ViewPager2;
+
+import com.zhpan.bannerview.transform.OverlapPageTransformer;
+import com.zhpan.bannerview.transform.ScaleInTransformer;
+
 /**
  * <pre>
  *   Created by zhpan on 2019/11/20.
@@ -15,9 +24,16 @@ public class BannerManager {
 
     private final AttributeController mAttributeController;
 
+    private final CompositePageTransformer mCompositePageTransformer;
+
+    private MarginPageTransformer mMarginPageTransformer;
+
+    private ViewPager2.PageTransformer mDefaultPageTransformer;
+
     public BannerManager() {
         mBannerOptions = new BannerOptions();
         mAttributeController = new AttributeController(mBannerOptions);
+        mCompositePageTransformer = new CompositePageTransformer();
     }
 
     public BannerOptions getBannerOptions() {
@@ -30,4 +46,46 @@ public class BannerManager {
     public void initAttrs(Context context, AttributeSet attrs) {
         mAttributeController.init(context, attrs);
     }
+
+    public CompositePageTransformer getCompositePageTransformer() {
+        return mCompositePageTransformer;
+    }
+
+    public void addTransformer(@NonNull ViewPager2.PageTransformer transformer) {
+        mCompositePageTransformer.addTransformer(transformer);
+    }
+
+    public void removeTransformer(@NonNull ViewPager2.PageTransformer transformer) {
+        mCompositePageTransformer.removeTransformer(transformer);
+    }
+
+    public void removeMarginPageTransformer() {
+        if (mMarginPageTransformer != null) {
+            mCompositePageTransformer.removeTransformer(mMarginPageTransformer);
+        }
+    }
+
+    public void removeDefaultPageTransformer() {
+        if (mDefaultPageTransformer != null) {
+            mCompositePageTransformer.removeTransformer(mDefaultPageTransformer);
+        }
+    }
+
+    public void setPageMargin(int pageMargin) {
+        mBannerOptions.setPageMargin(pageMargin);
+        removeMarginPageTransformer();
+        mMarginPageTransformer = new MarginPageTransformer(pageMargin);
+        mCompositePageTransformer.addTransformer(mMarginPageTransformer);
+    }
+
+    public void setMultiPageStyle(boolean overlap, float scale) {
+        removeDefaultPageTransformer();
+        if (overlap && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            mDefaultPageTransformer = new OverlapPageTransformer(mBannerOptions
+                    .getOrientation(), scale, 0f, 1, 0);
+        } else {
+            mDefaultPageTransformer = new ScaleInTransformer(scale);
+        }
+        mCompositePageTransformer.addTransformer(mDefaultPageTransformer);
+    }
 }

+ 11 - 1
bannerview/src/main/java/com/zhpan/bannerview/manager/BannerOptions.java

@@ -60,6 +60,8 @@ public class BannerOptions {
 
     private int orientation = ViewPager2.ORIENTATION_HORIZONTAL;
 
+    private boolean disallowIntercept;
+
     private final IndicatorOptions mIndicatorOptions;
 
     public int getInterval() {
@@ -249,6 +251,14 @@ public class BannerOptions {
         mIndicatorOptions.setSlideProgress(0);
     }
 
+    public boolean isDisallowIntercept() {
+        return disallowIntercept;
+    }
+
+    public void setDisallowIntercept(boolean disallowIntercept) {
+        this.disallowIntercept = disallowIntercept;
+    }
+
     public int getOffScreenPageLimit() {
         return offScreenPageLimit;
     }
@@ -259,7 +269,7 @@ public class BannerOptions {
 
     public static class IndicatorMargin {
 
-        private final int left,right,top,bottom;
+        private final int left, right, top, bottom;
 
         public IndicatorMargin(int left, int top, int right, int bottom) {
             this.left = left;