Browse Source

Support set indicator below Banner (#22)

* Add MULTI_PAGE style.

* Update ReadMe.

* Optimize Scroller

* Update QR code

* 优化代码

* Support the indicator below of Banner.

* change launcher icon

* change launcher icon

* 优化代码

* merge master into 2.4.2
zhpanvip 5 years ago
parent
commit
c7f6a4e5ed
31 changed files with 167 additions and 146 deletions
  1. 1 1
      README.md
  2. 2 2
      app/build.gradle
  3. 2 2
      app/src/main/java/com/example/zhpan/circleviewpager/activity/BaseDataActivity.java
  4. 2 1
      app/src/main/java/com/example/zhpan/circleviewpager/activity/CustomerBannerPageActivity.java
  5. 5 7
      app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java
  6. 1 1
      app/src/main/java/com/example/zhpan/circleviewpager/activity/NetworkBannerActivity.java
  7. 26 7
      app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java
  8. 2 1
      app/src/main/java/com/example/zhpan/circleviewpager/activity/PageTransformerActivity.java
  9. 8 0
      app/src/main/res/layout/activity_page_style.xml
  10. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher.png
  11. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher.png
  12. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher.png
  13. BIN
      app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  14. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  15. 67 105
      bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java
  16. 27 0
      bannerview/src/main/java/com/zhpan/bannerview/annotation/Visibility.java
  17. 2 1
      bannerview/src/main/java/com/zhpan/bannerview/indicator/BaseIndicatorView.java
  18. 6 4
      bannerview/src/main/java/com/zhpan/bannerview/indicator/CircleIndicatorView.java
  19. 7 5
      bannerview/src/main/java/com/zhpan/bannerview/indicator/DashIndicatorView.java
  20. 3 1
      bannerview/src/main/java/com/zhpan/bannerview/indicator/IIndicator.java
  21. 4 4
      bannerview/src/main/java/com/zhpan/bannerview/view/CatchViewPager.java
  22. 2 4
      bannerview/src/main/res/layout/layout_banner_view_pager.xml
  23. BIN
      download/app.apk
  24. BIN
      download/key
  25. BIN
      image/page_style_multi.gif
  26. BIN
      image/page_style_multi_overlay.gif
  27. BIN
      image/page_style_multi_scale.gif
  28. BIN
      image/qrcode.png
  29. BIN
      image/style_circle.gif
  30. BIN
      image/style_custum.gif
  31. BIN
      image/style_dash.gif

+ 1 - 1
README.md

@@ -7,7 +7,7 @@
 
 ## 效果预览
 
- ### [扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/raw/master/apk/app.apk)
+ ### [扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/raw/master/download/app.apk)
 
 ![扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/image/qrcode.png)
 

+ 2 - 2
app/build.gradle

@@ -42,10 +42,10 @@ dependencies {
     androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
         exclude group: 'com.android.support', module: 'support-annotations'
     })
-    implementation 'androidx.appcompat:appcompat:1.0.2'
+    implementation 'androidx.appcompat:appcompat:1.1.0'
     implementation 'androidx.recyclerview:recyclerview:1.0.0'
     testImplementation 'junit:junit:4.12'
-    implementation 'com.github.bumptech.glide:glide:4.8.0'
+    implementation 'com.github.bumptech.glide:glide:4.9.0'
     implementation 'com.github.chrisbanes:PhotoView:2.1.0'
 //    implementation 'com.github.zhpanvip:BannerViewPager:2.3.5'
     implementation project(path: ':bannerview')

+ 2 - 2
app/src/main/java/com/example/zhpan/circleviewpager/activity/BaseDataActivity.java

@@ -17,8 +17,8 @@ public abstract class BaseDataActivity extends AppCompatActivity {
 
     private void initData() {
         for (int i = 0; i <= 3; i++) {
-            int drawable2 = getResources().getIdentifier("t" + i, "drawable", getPackageName());
-            mDrawableList.add(drawable2);
+            int drawable = getResources().getIdentifier("t" + i, "drawable", getPackageName());
+            mDrawableList.add(drawable);
         }
     }
 }

+ 2 - 1
app/src/main/java/com/example/zhpan/circleviewpager/activity/CustomerBannerPageActivity.java

@@ -4,6 +4,7 @@ package com.example.zhpan.circleviewpager.activity;
 import androidx.appcompat.app.AppCompatActivity;
 
 import android.os.Bundle;
+import android.view.View;
 import android.widget.Toast;
 
 import com.example.zhpan.circleviewpager.R;
@@ -37,7 +38,7 @@ public class CustomerBannerPageActivity extends AppCompatActivity {
         mViewPager = findViewById(R.id.viewpager);
         mViewPager.setAutoPlay(false)
                 .setCanLoop(false)
-                .showIndicator(false)
+                .setIndicatorVisibility(View.GONE)
                 .setOnPageClickListener(position -> Toast.makeText(CustomerBannerPageActivity.this,
                         "点击页面" + mViewPager.getCurrentItem(), Toast.LENGTH_SHORT).show())
                 .setHolderCreator(() -> {

+ 5 - 7
app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java

@@ -14,7 +14,6 @@ import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.constants.IndicatorGravity;
 import com.zhpan.bannerview.constants.IndicatorStyle;
 import com.zhpan.bannerview.utils.DpUtils;
-import com.zhpan.idea.utils.LogUtils;
 import com.zhpan.idea.utils.ToastUtils;
 
 public class IndicatorStyleActivity extends BaseDataActivity {
@@ -38,7 +37,6 @@ public class IndicatorStyleActivity extends BaseDataActivity {
         radioGroupStyle.setVisibility(View.VISIBLE);
         radioGroupStyle.setVisibility(View.VISIBLE);
         radioGroupStyle.setOnCheckedChangeListener((group, checkedId) -> {
-            LogUtils.e("LLL", "check" + checkedId);
             switch (checkedId) {
                 case R.id.rb_circle:
                     mViewPager.resetIndicator();
@@ -62,7 +60,7 @@ public class IndicatorStyleActivity extends BaseDataActivity {
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setIndicatorGap(DpUtils.dp2px(6))
                 .setPageMargin(0)
-                .setIndicatorMargin(0,0,0,DpUtils.dp2px(10))
+                .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);
@@ -83,20 +81,20 @@ public class IndicatorStyleActivity extends BaseDataActivity {
         mViewPager = findViewById(R.id.banner_view_dash);
         mViewPager.setAutoPlay(false).setCanLoop(true)
                 .setPageMargin(DpUtils.dp2px(20))
+                .setIndicatorMargin(0, 0, DpUtils.dp2px(10), DpUtils.dp2px(10))
                 .setIndicatorGravity(IndicatorGravity.END)
-                .setIndicatorView(setupIndicatorView(mDrawableList.size()))
+                .setIndicatorView(setupIndicatorView())
                 .setHolderCreator(() -> new ImageResourceViewHolder(0)).create(mDrawableList);
     }
 
     /**
      * 这里可以是自定义的Indicator,需要继承BaseIndicatorView或者实现IIndicator接口;
      */
-    private FigureIndicatorView setupIndicatorView(int pageSize) {
+    private FigureIndicatorView setupIndicatorView() {
         FigureIndicatorView indicatorView = new FigureIndicatorView(this);
-        indicatorView.setPageSize(pageSize);
         indicatorView.setRadius(DpUtils.dp2px(18));
         indicatorView.setTextSize(DpUtils.dp2px(13));
-        indicatorView.setBackgroundColor(Color.parseColor("#88FF5252"));
+        indicatorView.setBackgroundColor(Color.parseColor("#aa118EEA"));
         return indicatorView;
     }
 

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

@@ -98,7 +98,7 @@ public class NetworkBannerActivity extends RxAppCompatActivity {
     }
 
     private void initBanner() {
-        mBannerViewPager.showIndicator(true)
+        mBannerViewPager
                 .setInterval(3000)
                 .setCanLoop(false)
                 .setAutoPlay(true)

+ 26 - 7
app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java

@@ -2,6 +2,7 @@ package com.example.zhpan.circleviewpager.activity;
 
 import android.graphics.Color;
 import android.os.Bundle;
+import android.view.View;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
 
@@ -10,6 +11,8 @@ import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.annotation.APageStyle;
 import com.zhpan.bannerview.constants.PageStyle;
+import com.zhpan.bannerview.indicator.BaseIndicatorView;
+import com.zhpan.bannerview.indicator.CircleIndicatorView;
 import com.zhpan.bannerview.utils.DpUtils;
 import com.zhpan.idea.utils.ToastUtils;
 
@@ -21,18 +24,19 @@ public class PageStyleActivity extends BaseDataActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_page_style);
         mViewPager = findViewById(R.id.banner_view);
-        initRadioGroup();
-    }
-
-    private void setupBanner(@APageStyle int pageStyle) {
         mViewPager
                 .setPageMargin(DpUtils.dp2px(10))
                 .setRevealWidth(DpUtils.dp2px(10))
-                .setInterval(3000)
-                .setPageStyle(pageStyle)
                 .setHolderCreator(() -> new ImageResourceViewHolder(DpUtils.dp2px(5)))
                 .setIndicatorColor(Color.parseColor("#935656"), Color.parseColor("#FF4C39"))
                 .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
+                .setInterval(3000);
+        initRadioGroup();
+    }
+
+    private void setupBanner(@APageStyle int pageStyle) {
+        mViewPager
+                .setPageStyle(pageStyle)
                 .create(mDrawableList);
     }
 
@@ -47,7 +51,7 @@ public class PageStyleActivity extends BaseDataActivity {
                     setupBanner(PageStyle.MULTI_PAGE_SCALE);
                     break;
                 case R.id.rb_multi_page_overlap:
-                    setupBanner(PageStyle.MULTI_PAGE_OVERLAP);
+                    setupOverlapBanner();
                     break;
             }
         });
@@ -55,6 +59,21 @@ public class PageStyleActivity extends BaseDataActivity {
         radioButton.performClick();
     }
 
+    private void setupOverlapBanner() {
+        mViewPager
+                .setIndicatorVisibility(View.GONE)
+                .setPageStyle(PageStyle.MULTI_PAGE_OVERLAP)
+                .setIndicatorView(setupIndicatorView())
+                .create(mDrawableList);
+    }
+
+    private BaseIndicatorView setupIndicatorView() {
+        CircleIndicatorView indicatorView = findViewById(R.id.indicator_view);
+        indicatorView.setCheckedColor(Color.parseColor("#935656"));
+        indicatorView.setNormalColor(Color.parseColor("#FF4C39"));
+        return indicatorView;
+    }
+
     @Override
     protected void onStop() {
         super.onStop();

+ 2 - 1
app/src/main/java/com/example/zhpan/circleviewpager/activity/PageTransformerActivity.java

@@ -5,6 +5,7 @@ import androidx.appcompat.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.View;
 import android.widget.Toast;
 
 import com.example.zhpan.circleviewpager.R;
@@ -55,7 +56,7 @@ public class PageTransformerActivity extends AppCompatActivity {
 
     private void initViewPager() {
         mViewpager = findViewById(R.id.viewpager);
-        mViewpager.showIndicator(false)
+        mViewpager.setIndicatorVisibility(View.GONE)
                 .setCanLoop(false)
                 .setAutoPlay(false)
                 .setScrollDuration(1000)

+ 8 - 0
app/src/main/res/layout/activity_page_style.xml

@@ -13,6 +13,14 @@
         android:layout_marginTop="20dp"
         app:bvp_page_style="multi_page" />
 
+    <com.zhpan.bannerview.indicator.CircleIndicatorView
+        android:id="@+id/indicator_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_centerHorizontal="true"
+        android:layout_below="@id/banner_view" />
+
     <RadioGroup
         android:id="@+id/rg_indicator_style"
         android:layout_width="match_parent"

BIN
app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


+ 67 - 105
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -12,6 +12,7 @@ import androidx.annotation.Nullable;
 import androidx.viewpager.widget.ViewPager;
 
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
@@ -22,6 +23,7 @@ import com.zhpan.bannerview.annotation.AIndicatorSlideMode;
 import com.zhpan.bannerview.annotation.AIndicatorStyle;
 import com.zhpan.bannerview.annotation.APageStyle;
 import com.zhpan.bannerview.annotation.ATransformerStyle;
+import com.zhpan.bannerview.annotation.Visibility;
 import com.zhpan.bannerview.constants.IndicatorSlideMode;
 import com.zhpan.bannerview.constants.IndicatorStyle;
 import com.zhpan.bannerview.constants.PageStyle;
@@ -52,53 +54,56 @@ import static com.zhpan.bannerview.transform.pagestyle.ScaleInTransformer.DEFAUL
 public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout implements
         ViewPager.OnPageChangeListener {
 
-    private CatchViewPager mViewPager;
-
-    private List<T> mList;
-    // 页面切换时间间隔
     private int interval;
-    // 当前页面位置
+
     private int currentPosition;
-    // 是否正在循环
+
     private boolean isLooping;
-    // 是否开启循环
+
     private boolean isCanLoop;
-    // 是否开启自动播放
+
     private boolean isAutoPlay = false;
-    // 是否显示指示器
-    private boolean showIndicator = true;
-    // Indicator gravity
+
     private int gravity;
-    // 未选中时指示器颜色
+
     private int indicatorNormalColor;
-    // 选中时的指示器颜色
+
     private int indicatorCheckedColor;
-    // 指示器宽度/直径
+
     private int normalIndicatorWidth;
-    // 选中时指示宽度/直径
+
     private int checkedIndicatorWidth;
-    // 页面点击事件监听
+
     private OnPageClickListener mOnPageClickListener;
-    // 轮播指示器
+
     private IIndicator mIndicatorView;
-    //  存放IndicatorView的容器
+
     private RelativeLayout mRelativeLayout;
-    //  Item 间隔
+
     private int mPageMargin;
-    // 一屏多页时,显露其它page的width
+
     private int mRevealWidth;
-    // 指示器Style样式
+
     private int mIndicatorStyle;
-    // IndicatorView的滑动模式
+
     private int mIndicatorSlideMode;
 
+    private CatchViewPager mViewPager;
+
+    private List<T> mList;
+
     private HolderCreator<VH> holderCreator;
-//    private BannerScroller mScroller;
+
     private int indicatorGap;
+
     private int indicatorHeight;
+
     private boolean isCustomIndicator;
+
     private int mPageStyle = PageStyle.NORMAL;
 
+    private IndicatorMargin mIndicatorMargin;
+
     private Handler mHandler = new Handler();
 
     private Runnable mRunnable = new Runnable() {
@@ -117,10 +122,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         }
     };
 
-    private IndicatorMargin mIndicatorMargin;
-
-//    private OnPageSelectedListener mOnPageSelectedListener;
-
     public BannerViewPager(Context context) {
         this(context, null);
     }
@@ -182,7 +183,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      */
     private void initData() {
         if (mList.size() > 0) {
-            if (mList.size() > 1 && showIndicator) {
+            if (mList.size() > 1) {
                 if (isCustomIndicator && null != mIndicatorView) {
                     initIndicator(mIndicatorView);
                 } else {
@@ -240,22 +241,24 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      * 构造指示器
      */
     private void initIndicator(IIndicator indicatorView) {
-        mRelativeLayout.removeAllViews();
-        mRelativeLayout.addView((View) indicatorView);
         mIndicatorView = indicatorView;
-        setIndicatorViewMargin();
-        RelativeLayout.LayoutParams layoutParams =
-                (RelativeLayout.LayoutParams) ((View) indicatorView).getLayoutParams();
-        switch (gravity) {
-            case CENTER:
-                layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
-                break;
-            case START:
-                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
-                break;
-            case END:
-                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);
-                break;
+        if (((View) indicatorView).getParent() == null) {
+            mRelativeLayout.removeAllViews();
+            mRelativeLayout.addView((View) indicatorView);
+            setIndicatorViewMargin();
+            RelativeLayout.LayoutParams layoutParams =
+                    (RelativeLayout.LayoutParams) ((View) indicatorView).getLayoutParams();
+            switch (gravity) {
+                case CENTER:
+                    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
+                    break;
+                case START:
+                    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
+                    break;
+                case END:
+                    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);
+                    break;
+            }
         }
     }
 
@@ -305,15 +308,15 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         }
     }
 
-    private void setMultiPageStyle(boolean cascading, float scale) {
+    private void setMultiPageStyle(boolean overlap, float scale) {
         mPageMargin = mPageMargin == 0 ? DpUtils.dp2px(20) : mPageMargin;
         mRevealWidth = mRevealWidth == 0 ? DpUtils.dp2px(20) : mRevealWidth;
         setClipChildren(false);
         RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mViewPager.getLayoutParams();
         params.leftMargin = mPageMargin + mRevealWidth;
         params.rightMargin = mPageMargin + mRevealWidth;
-        mViewPager.setCascadingStyle(cascading);
-        mViewPager.setPageMargin(cascading ? -mPageMargin : mPageMargin);
+        mViewPager.setOverlapStyle(overlap);
+        mViewPager.setPageMargin(overlap ? -mPageMargin : mPageMargin);
         mViewPager.setOffscreenPageLimit(2);
         setPageTransformer(new ScaleInTransformer(scale));
     }
@@ -321,16 +324,14 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     @Override
     public void onPageSelected(int position) {
         currentPosition = position;
-        if (showIndicator && mIndicatorView != null) {
+        if (mIndicatorView != null) {
             mIndicatorView.onPageSelected(getRealPosition(position));
         }
-//        if (mOnPageSelectedListener != null)
-//            mOnPageSelectedListener.onPageSelected(getRealPosition(position));
     }
 
     @Override
     public void onPageScrollStateChanged(int state) {
-        if (showIndicator && mIndicatorView != null) {
+        if (mIndicatorView != null) {
             mIndicatorView.onPageScrollStateChanged(state);
         }
         if (isCanLoop) {
@@ -357,7 +358,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
 
     @Override
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        if (showIndicator && mIndicatorView != null) {
+        if (mIndicatorView != null) {
             mIndicatorView.onPageScrolled(getRealPosition(position), positionOffset, positionOffsetPixels);
         }
     }
@@ -442,7 +443,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         return this;
     }
 
-
     /**
      * 设置圆角ViewPager
      *
@@ -607,9 +607,16 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
 
     /**
      * @param showIndicator 是否显示轮播指示器
+     * @deprecated Use {@link #setIndicatorVisibility(int)} instead.
      */
+    @Deprecated
     public BannerViewPager<T, VH> showIndicator(boolean showIndicator) {
-        this.showIndicator = showIndicator;
+        mRelativeLayout.setVisibility(showIndicator ? VISIBLE : GONE);
+        return this;
+    }
+
+    public BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) {
+        mRelativeLayout.setVisibility(visibility);
         return this;
     }
 
@@ -649,7 +656,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         if (customIndicator instanceof View) {
             isCustomIndicator = true;
             mIndicatorView = customIndicator;
-//            initIndicator((View) customIndicator);
         }
         return this;
     }
@@ -676,7 +682,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
             mList.clear();
             mList.addAll(list);
             initData();
-            if (showIndicator && null != mIndicatorView) {
+            if (null != mIndicatorView) {
                 mIndicatorView.setPageSize(mList.size());
                 mIndicatorView.notifyDataChanged();
             }
@@ -740,11 +746,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         return this;
     }
 
-    //    public BannerViewPager<T, VH> setOnPageSelectedListener(OnPageSelectedListener onPageSelectedListener) {
-//        mOnPageSelectedListener = onPageSelectedListener;
-//        return this;
-//    }
-
     /**
      * 获取BannerViewPager中封装的ViewPager,用于设置BannerViewPager未暴露出来的接口,
      * 比如setCurrentItem等。
@@ -761,10 +762,10 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
 
     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);
+        mIndicatorMargin.bottom = bottom;
+        mIndicatorMargin.left = left;
+        mIndicatorMargin.top = top;
+        mIndicatorMargin.right = right;
         return this;
     }
 
@@ -784,46 +785,7 @@ 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;
-        }
+    private static class IndicatorMargin {
+        private int left, right, top, bottom;
     }
-
-//    public interface OnPageSelectedListener {
-//        void onPageSelected(int position);
-//    }
 }

+ 27 - 0
bannerview/src/main/java/com/zhpan/bannerview/annotation/Visibility.java

@@ -0,0 +1,27 @@
+package com.zhpan.bannerview.annotation;
+
+import android.view.View;
+
+import androidx.annotation.IntDef;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import static com.zhpan.bannerview.constants.IndicatorGravity.CENTER;
+import static com.zhpan.bannerview.constants.IndicatorGravity.END;
+import static com.zhpan.bannerview.constants.IndicatorGravity.START;
+
+
+/**
+ * <pre>
+ *   Created by zhangpan on 2019-11-12.
+ * </pre>
+ */
+@IntDef({View.VISIBLE, View.INVISIBLE, View.GONE})
+@Retention(RetentionPolicy.SOURCE)
+@Target(ElementType.PARAMETER)
+public @interface Visibility {
+
+}

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

@@ -8,6 +8,7 @@ import android.view.View;
 
 import androidx.annotation.Nullable;
 
+import com.zhpan.bannerview.annotation.AIndicatorSlideMode;
 import com.zhpan.bannerview.constants.IndicatorSlideMode;
 import com.zhpan.bannerview.utils.DpUtils;
 
@@ -163,7 +164,7 @@ public class BaseIndicatorView extends View implements IIndicator {
      * @see com.zhpan.bannerview.constants.IndicatorSlideMode#SMOOTH
      */
     @Override
-    public void setSlideMode(int slideMode) {
+    public void setSlideMode(@AIndicatorSlideMode int slideMode) {
         this.slideMode = slideMode;
     }
 

+ 6 - 4
bannerview/src/main/java/com/zhpan/bannerview/indicator/CircleIndicatorView.java

@@ -49,11 +49,13 @@ public class CircleIndicatorView extends BaseIndicatorView {
     @Override
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
-        for (int i = 0; i < pageSize; i++) {
-            mPaint.setColor(normalColor);
-            canvas.drawCircle(maxRadius + (2 * mNormalRadius + indicatorGap) * i, height / 2f, mNormalRadius, mPaint);
+        if(pageSize>1){
+            for (int i = 0; i < pageSize; i++) {
+                mPaint.setColor(normalColor);
+                canvas.drawCircle(maxRadius + (2 * mNormalRadius + indicatorGap) * i, height / 2f, mNormalRadius, mPaint);
+            }
+            drawSliderStyle(canvas);
         }
-        drawSliderStyle(canvas);
     }
 
     @Override

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

@@ -51,11 +51,13 @@ public class DashIndicatorView extends BaseIndicatorView {
     @Override
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
-        for (int i = 0; i < pageSize; i++) {
-            if (slideMode == IndicatorSlideMode.SMOOTH) {
-                smoothSlide(canvas, i);
-            } else {
-                normalSlide(canvas, i);
+        if (pageSize > 1) {
+            for (int i = 0; i < pageSize; i++) {
+                if (slideMode == IndicatorSlideMode.SMOOTH) {
+                    smoothSlide(canvas, i);
+                } else {
+                    normalSlide(canvas, i);
+                }
             }
         }
     }

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

@@ -2,6 +2,8 @@ package com.zhpan.bannerview.indicator;
 
 import androidx.viewpager.widget.ViewPager;
 
+import com.zhpan.bannerview.annotation.AIndicatorSlideMode;
+
 
 /**
  * <pre>
@@ -16,7 +18,7 @@ public interface IIndicator extends ViewPager.OnPageChangeListener {
 
     void setCheckedColor(int checkedColor);
 
-    void setSlideMode(int slideStyle);
+    void setSlideMode(@AIndicatorSlideMode int slideStyle);
 
     void setIndicatorGap(int gap);
 

+ 4 - 4
bannerview/src/main/java/com/zhpan/bannerview/view/CatchViewPager.java

@@ -23,7 +23,7 @@ import java.util.Collections;
 public class CatchViewPager extends ViewPager {
     private ArrayList<Integer> mArrayList = new ArrayList<>();
     private SparseIntArray mSparseIntArray = new SparseIntArray();
-    private boolean mCascadingStyle = false;
+    private boolean mOverlapStyle = false;
     private BannerScroller mBannerScroller;
     public static final int DEFAULT_SCROLL_DURATION = 800;
 
@@ -61,7 +61,7 @@ public class CatchViewPager extends ViewPager {
 
     @Override
     protected int getChildDrawingOrder(int childCount, int i) {
-        if (mCascadingStyle) {
+        if (mOverlapStyle) {
             if (i == 0 || mSparseIntArray.size() != childCount) {
                 mArrayList.clear();
                 mSparseIntArray.clear();
@@ -85,8 +85,8 @@ public class CatchViewPager extends ViewPager {
         return array[0] + view.getWidth() / 2;
     }
 
-    public void setCascadingStyle(boolean cascading) {
-        mCascadingStyle = cascading;
+    public void setOverlapStyle(boolean overlapStyle) {
+        mOverlapStyle = overlapStyle;
     }
 
     public void setScrollDuration(int scrollDuration) {

+ 2 - 4
bannerview/src/main/res/layout/layout_banner_view_pager.xml

@@ -2,16 +2,14 @@
 <merge xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="wrap_content"
     tools:parentTag="android.widget.RelativeLayout">
 
 
     <com.zhpan.bannerview.view.CatchViewPager
         android:id="@+id/vp_main"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true" />
+        android:layout_height="match_parent" />
 
     <RelativeLayout
         android:id="@+id/rl_indicator"

BIN
download/app.apk


BIN
download/key


BIN
image/page_style_multi.gif


BIN
image/page_style_multi_overlay.gif


BIN
image/page_style_multi_scale.gif


BIN
image/qrcode.png


BIN
image/style_circle.gif


BIN
image/style_custum.gif


BIN
image/style_dash.gif