Browse Source

Fix bug,add setIndicatorMargin api.

zhpanvip 5 years ago
parent
commit
dc8cca8c88

+ 1 - 0
README.md

@@ -70,6 +70,7 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
 | void getCurrentItem() | 获取当前position | 2.3.5新增 |
 | BannerViewPager<T, VH> setPageStyle(PageStyle pageStyle) | 设置页面样式 | 2.4.0新增 可选(MULTI_PAGE、NORMAL)MULTI_PAGE:一屏多页样式 |
 | BannerViewPager<T, VH> setPageMargin(int pageMargin) | 设置页面间隔 | 2.4.0新增 |
+| BannerViewPager<T, VH> setIndicatorMargin(int left, int top, int right, int bottom) | 设置Indicator边距 | 2.4.1新增 |
 | void startLoop() |开启自动轮播 | 初始化BannerViewPager时不必调用该方法,设置setAutoPlay后会调用startLoop() |
 | void stopLoop() | 停止自动轮播 | 如果开启自动轮播,为避免内存泄漏需要在onStop()或onDestroy中调用此方法 |
 | ViewPager getViewPager() | 获取BannerViewPager内部封装的ViewPager |  |

+ 1 - 0
app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java

@@ -62,6 +62,7 @@ public class IndicatorStyleActivity extends BaseDataActivity {
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorGap(DpUtils.dp2px(6))
                 .setPageMargin(0)
+                .setIndicatorMargin(0,0,0,DpUtils.dp2px(10))
                 .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
                 .setIndicatorColor(Color.parseColor("#935656"), Color.parseColor("#FF4C39"))
                 .setIndicatorRadius(DpUtils.dp2px(4), DpUtils.dp2px(5)).create(mDrawableList);

+ 65 - 0
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -14,6 +14,7 @@ import androidx.viewpager.widget.ViewPager;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.RelativeLayout;
 
 import com.zhpan.bannerview.annotation.AIndicatorGravity;
@@ -118,6 +119,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     };
 
     public static final int DEFAULT_SCROLL_DURATION = 800;
+    private IndicatorMargin mIndicatorMargin;
 
 //    private OnPageSelectedListener mOnPageSelectedListener;
 
@@ -256,6 +258,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         mRelativeLayout.removeAllViews();
         mRelativeLayout.addView((View) indicatorView);
         mIndicatorView = indicatorView;
+        setIndicatorViewMargin();
         RelativeLayout.LayoutParams layoutParams =
                 (RelativeLayout.LayoutParams) ((View) indicatorView).getLayoutParams();
         switch (gravity) {
@@ -271,6 +274,16 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         }
     }
 
+    private void setIndicatorViewMargin() {
+        if (mIndicatorMargin != null) {
+            ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) mRelativeLayout.getLayoutParams();
+            layoutParams.rightMargin = mIndicatorMargin.right;
+            layoutParams.bottomMargin = mIndicatorMargin.bottom;
+            layoutParams.topMargin = mIndicatorMargin.top;
+            layoutParams.leftMargin = mIndicatorMargin.left;
+        }
+    }
+
     private void setupViewPager() {
         if (holderCreator != null) {
             BannerPagerAdapter<T, VH> bannerPagerAdapter =
@@ -760,12 +773,25 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      * 获取BannerViewPager中封装的ViewPager,用于设置BannerViewPager未暴露出来的接口,
      * 比如setCurrentItem等。
      *
+     * 通过该方法调用getCurrentItem等方法可能会有问题
+     * 2.4.1已废弃,可直接调用BannerViewPager中相关方法替代
+     *
      * @return BannerViewPager中封装的ViewPager
      */
+    @Deprecated
     public ViewPager getViewPager() {
         return mViewPager;
     }
 
+    public BannerViewPager<T, VH> setIndicatorMargin(int left, int top, int right, int bottom) {
+        mIndicatorMargin = new IndicatorMargin();
+        mIndicatorMargin.setBottom(bottom);
+        mIndicatorMargin.setLeft(left);
+        mIndicatorMargin.setTop(top);
+        mIndicatorMargin.setRight(right);
+        return this;
+    }
+
     /**
      * 仅供demo使用
      */
@@ -782,6 +808,45 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         void onPageClick(int position);
     }
 
+    public static class IndicatorMargin {
+        private int left;
+        private int right;
+        private int top;
+        private int bottom;
+
+        public int getLeft() {
+            return left;
+        }
+
+        public void setLeft(int left) {
+            this.left = left;
+        }
+
+        public int getRight() {
+            return right;
+        }
+
+        public void setRight(int right) {
+            this.right = right;
+        }
+
+        public int getTop() {
+            return top;
+        }
+
+        public void setTop(int top) {
+            this.top = top;
+        }
+
+        public int getBottom() {
+            return bottom;
+        }
+
+        public void setBottom(int bottom) {
+            this.bottom = bottom;
+        }
+    }
+
 //    public interface OnPageSelectedListener {
 //        void onPageSelected(int position);
 //    }

+ 1 - 2
bannerview/src/main/java/com/zhpan/bannerview/indicator/CircleIndicatorView.java

@@ -2,7 +2,6 @@ package com.zhpan.bannerview.indicator;
 
 import android.content.Context;
 import android.graphics.Canvas;
-import android.graphics.Paint;
 import android.util.AttributeSet;
 
 /**
@@ -43,7 +42,7 @@ public class CircleIndicatorView extends BaseIndicatorView {
         mNormalRadius = normalIndicatorWidth / 2;
         mCheckedRadius = checkedIndicatorWidth / 2;
         maxRadius = Math.max(mCheckedRadius, mNormalRadius);
-        setMeasuredDimension((int) ((pageSize - 1) * indicatorGap + 2 * maxRadius * pageSize),
+        setMeasuredDimension((int) ((pageSize - 1) * indicatorGap + 2 * (maxRadius + mNormalRadius * (pageSize - 1))),
                 (int) (2 * maxRadius));
     }
 

+ 1 - 1
bannerview/src/main/java/com/zhpan/bannerview/indicator/DashIndicatorView.java

@@ -39,7 +39,7 @@ public class DashIndicatorView extends BaseIndicatorView {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
         maxWidth = Math.max(normalIndicatorWidth, checkedIndicatorWidth);
         minWidth = Math.min(normalIndicatorWidth, checkedIndicatorWidth);
-        setMeasuredDimension((int) ((pageSize - 1) * indicatorGap + maxWidth * pageSize),
+        setMeasuredDimension((int) ((pageSize - 1) * indicatorGap + maxWidth + (pageSize - 1) * minWidth),
                 (int) (sliderHeight));
     }
 

+ 1 - 1
bannerview/src/main/res/layout/layout_banner_view_pager.xml

@@ -18,5 +18,5 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
-        android:padding="10dp" />
+        android:layout_margin="10dp"/>
 </merge>