Browse Source

add some new attrs. (#23)

* add some new attrs.

* fix readme.
zhpanvip 5 years ago
parent
commit
099a5ef62e

+ 24 - 6
README.md

@@ -7,12 +7,12 @@
 
 ## 效果预览
 
- ### [扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/raw/master/download/app.apk)
+ ### [点击或扫描二维码下载apk](https://github.com/zhpanvip/BannerViewPager/raw/master/download/app.apk)
 
 ![扫描下载Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/image/qrcode.png)
 
 
-### 1.setPageStyle--支持一屏多页
+### 1.setPageStyle
 
 [一屏多页Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/activity/PageStyleActivity.java)
 
@@ -20,12 +20,12 @@
 |--|--|--|
 | ![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi.gif) |![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi_scale.gif) |![MULTI_PAGE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/page_style_multi_overlay.gif) |
 
-### 2.setIndicatorViewStyle
+### 2.setIndicatorStyle
 BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义IndicatorView的功能。只要继承BaseIndicatorView或者实现IIndicator接口,并重写相应方法,就可以为所欲为的打造任意的Indicator了。
 
 [IndicatorViewStyle Demo](https://github.com/zhpanvip/BannerViewPager/blob/master/app/src/main/java/com/example/zhpan/circleviewpager/activity/IndicatorStyleActivity.java)
 
-| CIRCLE | DASH | 自定义 |
+| CIRCLE | DASH | Custom |
 |--|--|--|
 | ![CIRCLE](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_circle.gif) | ![DASH](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_dash.gif) | ![NORMAL](https://github.com/zhpanvip/BannerViewPager/blob/master/image/style_custum.gif) |
 
@@ -57,7 +57,7 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
 | BannerViewPager<T, VH> setRoundCorner(int radius) | 设置圆角 |默认无圆角 需要SDK_INT>=LOLLIPOP(API 21)  |
 | BannerViewPager<T, VH> setOnPageClickListener(OnPageClickListener onPageClickListener) | 设置页面点击事件 |  |
 | BannerViewPager<T, VH> setHolderCreator(HolderCreator\<VH> holderCreator) |设置HolderCreator  |必须设置HolderCreator,否则会抛出NullPointerException|
-| BannerViewPager<T, VH> showIndicator(boolean showIndicator) |  是否显示指示器|默认值true  |
+| BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) | indicator vibility |默认值VISIBLE 2.4.2 新增|
 | BannerViewPager<T, VH> setIndicatorStyle(int indicatorStyle) | 设置指示器样式 | 可选枚举(CIRCLE, DASH) 默认CIRCLE  |
 | BannerViewPager<T, VH> setIndicatorGravity(int gravity) | 指示器位置 |可选值(CENTER、START、END)默认值CENTER |
 | BannerViewPager<T, VH> setIndicatorColor(int normalColor,int checkedColor) | 指示器圆点颜色 |normalColor:未选中时颜色默认"#8C6C6D72", checkedColor:选中时颜色 默认"#8C18171C" |
@@ -77,10 +77,28 @@ BannerViewPager支持多种IndicatorViewStyle,同时还提供了完全自定义I
 | 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 |  |
 | List\<T> getList() | 获取Banner中的集合数据 |  |
 | void create(List<T> list) |初始化并构造BannerViewPager  |必须调用,否则前面设置的参数无效  |
 
+### xml支持的attrs
+| Attributes | format | description |
+|--|--|--|
+| bvp_interval | integer | 自动轮播事件间隔 |
+| bvp_scroll_duration | integer | 页面切换时滑动时间|
+| bvp_can_loop | boolean| 是否循环 |
+| bvp_auto_play | boolean | 是否自动播放  |
+| bvp_indicator_checked_color | color | indicator选中时颜色 |
+| bvp_indicator_normal_color | color | indicator未选中时颜色 |
+| bvp_indicator_radius | dimension | indicator圆点半径或者Dash模式的1/2宽度  |
+| bvp_round_corner| dimension  | Banner圆角大小 |
+| bvp_page_margin | dimension | 页面item间距 |
+| bvp_reveal_width | dimension | 一屏多页模式下两边item漏出的宽度 |
+| bvp_indicator_style | enum | indicator样式(circle/dash)  |
+| bvp_indicator_slide_mode | enum | indicator滑动模式(normal/smooth) |
+| bvp_indicator_gravity | enum | indicator位置(center/start/end) |
+| bvp_page_style | enum | page样式(normal/multi_page/multi_page_overlap/multi_page_scale) |
+| bvp_transformer_style | enum | transform样式(normal/depth/stack/accordion) |
+| bvp_indicator_visibility| enum | indicator visibility(visible/gone/invisible) |
 
 
 ## 如何使用

BIN
apk/app.apk


BIN
apk/key


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

@@ -26,8 +26,7 @@ public class IndicatorStyleActivity extends BaseDataActivity {
         setContentView(R.layout.activity_indicator_slide_mode);
         setTitle(getString(R.string.indicator_style));
         mViewPager = findViewById(R.id.banner_view_dash);
-        mViewPager.setRoundCorner(DpUtils.dp2px(8))
-                .setIndicatorGap(DpUtils.dp2px(6))
+        mViewPager.setIndicatorGap(DpUtils.dp2px(6))
                 .setHolderCreator(() -> new ImageResourceViewHolder(0));
         initRadioGroup();
     }

+ 4 - 1
app/src/main/res/layout/activity_indicator_slide_mode.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -10,7 +11,9 @@
         android:id="@+id/banner_view_dash"
         android:layout_width="match_parent"
         android:layout_height="180dp"
-        android:layout_margin="10dp" />
+        android:layout_margin="10dp"
+        app:bvp_indicator_visibility="visible"
+        app:bvp_round_corner="8dp" />
 
     <RadioGroup
         android:id="@+id/rg_indicator_style"

+ 27 - 20
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -12,7 +12,6 @@ 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;
@@ -47,6 +46,7 @@ import static com.zhpan.bannerview.constants.IndicatorGravity.CENTER;
 import static com.zhpan.bannerview.constants.IndicatorGravity.END;
 import static com.zhpan.bannerview.constants.IndicatorGravity.START;
 import static com.zhpan.bannerview.transform.pagestyle.ScaleInTransformer.DEFAULT_MIN_SCALE;
+import static com.zhpan.bannerview.transform.pagestyle.ScaleInTransformer.MAX_SCALE;
 
 /**
  * Created by zhpan on 2017/3/28.
@@ -64,7 +64,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
 
     private boolean isAutoPlay = false;
 
-    private int gravity;
+    private int indicatorGravity;
 
     private int indicatorNormalColor;
 
@@ -121,6 +121,9 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
             }
         }
     };
+    private int mIndicatorVisibility;
+    private int mScrollDuration;
+    private int mRoundCorner;
 
     public BannerViewPager(Context context) {
         this(context, null);
@@ -161,6 +164,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
                             Color.parseColor("#8C6C6D72"));
             normalIndicatorWidth = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_indicator_radius,
                     DpUtils.dp2px(8));
+
             indicatorGap = normalIndicatorWidth;
             indicatorHeight = normalIndicatorWidth / 2;
             checkedIndicatorWidth = normalIndicatorWidth;
@@ -168,19 +172,19 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
             isAutoPlay = typedArray.getBoolean(R.styleable.BannerViewPager_bvp_auto_play, true);
             isCanLoop = typedArray.getBoolean(R.styleable.BannerViewPager_bvp_can_loop, true);
             mPageMargin = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_page_margin, 0);
+            mRoundCorner = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_round_corner, 0);
             mRevealWidth = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_reveal_width, 0);
 
-            gravity = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_gravity, 0);
+            indicatorGravity = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_gravity, 0);
             mPageStyle = typedArray.getInt(R.styleable.BannerViewPager_bvp_page_style, 0);
             mIndicatorStyle = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_style, 0);
             mIndicatorSlideMode = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_slide_mode, 0);
+            mIndicatorVisibility = typedArray.getInt(R.styleable.BannerViewPager_bvp_indicator_visibility, 0);
+            mScrollDuration = typedArray.getInt(R.styleable.BannerViewPager_bvp_scroll_duration, 800);
             typedArray.recycle();
         }
     }
 
-    /**
-     * 初始化IndicatorView及ViewPager
-     */
     private void initData() {
         if (mList.size() > 0) {
             if (mList.size() > 1) {
@@ -212,7 +216,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         return indicatorView;
     }
 
-
     /**
      * 设置触摸事件,当滑动或者触摸时停止自动轮播
      */
@@ -237,10 +240,8 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         });
     }
 
-    /**
-     * 构造指示器
-     */
     private void initIndicator(IIndicator indicatorView) {
+        mRelativeLayout.setVisibility(mIndicatorVisibility);
         mIndicatorView = indicatorView;
         if (((View) indicatorView).getParent() == null) {
             mRelativeLayout.removeAllViews();
@@ -248,7 +249,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
             setIndicatorViewMargin();
             RelativeLayout.LayoutParams layoutParams =
                     (RelativeLayout.LayoutParams) ((View) indicatorView).getLayoutParams();
-            switch (gravity) {
+            switch (indicatorGravity) {
                 case CENTER:
                     layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
                     break;
@@ -286,18 +287,24 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
             mViewPager.setAdapter(bannerPagerAdapter);
             mViewPager.setCurrentItem(currentPosition);
             mViewPager.addOnPageChangeListener(this);
+            mViewPager.setScrollDuration(mScrollDuration);
             initPageStyle();
             startLoop();
             setTouchListener();
         } else {
             throw new NullPointerException("You must set HolderCreator for BannerViewPager");
         }
+
+        if (mRoundCorner > 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            ViewStyleSetter viewStyleSetter = new ViewStyleSetter(this);
+            viewStyleSetter.setRoundCorner(mRoundCorner);
+        }
     }
 
     private void initPageStyle() {
         switch (mPageStyle) {
             case PageStyle.MULTI_PAGE:
-                setMultiPageStyle(false, 0.999f);
+                setMultiPageStyle(false, MAX_SCALE);
                 break;
             case PageStyle.MULTI_PAGE_OVERLAP:
                 setMultiPageStyle(true, DEFAULT_MIN_SCALE);
@@ -312,7 +319,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         mPageMargin = mPageMargin == 0 ? DpUtils.dp2px(20) : mPageMargin;
         mRevealWidth = mRevealWidth == 0 ? DpUtils.dp2px(20) : mRevealWidth;
         setClipChildren(false);
-        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mViewPager.getLayoutParams();
+        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mViewPager.getLayoutParams();
         params.leftMargin = mPageMargin + mRevealWidth;
         params.rightMargin = mPageMargin + mRevealWidth;
         mViewPager.setOverlapStyle(overlap);
@@ -449,10 +456,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      * @param radius 圆角大小
      */
     public BannerViewPager<T, VH> setRoundCorner(int radius) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            ViewStyleSetter viewStyleSetter = new ViewStyleSetter(this);
-            viewStyleSetter.setRoundCorner(radius);
-        }
+        mRoundCorner = radius;
         return this;
     }
 
@@ -525,7 +529,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      * @param scrollDuration page滚动时间
      */
     public BannerViewPager<T, VH> setScrollDuration(int scrollDuration) {
-        mViewPager.setScrollDuration(scrollDuration);
+        mScrollDuration = scrollDuration;
         return this;
     }
 
@@ -616,7 +620,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
     }
 
     public BannerViewPager<T, VH> setIndicatorVisibility(@Visibility int visibility) {
-        mRelativeLayout.setVisibility(visibility);
+        mIndicatorVisibility = visibility;
         return this;
     }
 
@@ -629,7 +633,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
      *                {@link com.zhpan.bannerview.constants.IndicatorGravity#END}
      */
     public BannerViewPager<T, VH> setIndicatorGravity(@AIndicatorGravity int gravity) {
-        this.gravity = gravity;
+        this.indicatorGravity = gravity;
         return this;
     }
 
@@ -741,6 +745,9 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im
         return this;
     }
 
+    /**
+     * @param revealWidth 一屏多页模式下两边页面显露出来的宽度
+     */
     public BannerViewPager<T, VH> setRevealWidth(int revealWidth) {
         mRevealWidth = revealWidth;
         return this;

+ 1 - 0
bannerview/src/main/java/com/zhpan/bannerview/transform/pagestyle/ScaleInTransformer.java

@@ -9,6 +9,7 @@ import androidx.viewpager.widget.ViewPager;
 public class ScaleInTransformer extends BasePageTransformer {
 
     public static final float DEFAULT_MIN_SCALE = 0.85f;
+    public static final float MAX_SCALE = 0.999f;
     private float mMinScale = DEFAULT_MIN_SCALE;
 
     public ScaleInTransformer() {

+ 16 - 4
bannerview/src/main/res/values/attrs.xml

@@ -3,12 +3,17 @@
     <declare-styleable name="BannerViewPager">
         <!--页面切换时间间隔-->
         <attr name="bvp_interval" format="integer" />
+        <attr name="bvp_scroll_duration" format="integer" />
         <attr name="bvp_can_loop" format="boolean" />
         <attr name="bvp_auto_play" format="boolean" />
         <!--<attr name="indicator_gravity" format="integer"/>-->
         <attr name="bvp_indicator_checked_color" format="color" />
         <attr name="bvp_indicator_normal_color" format="color" />
         <attr name="bvp_indicator_radius" format="dimension" />
+        <attr name="bvp_round_corner" format="dimension" />
+        <attr name="bvp_page_margin" format="dimension" />
+        <attr name="bvp_reveal_width" format="dimension" />
+
         <attr name="bvp_indicator_style" format="enum">
             <enum name="circle" value="0" />
             <enum name="dash" value="1" />
@@ -18,12 +23,15 @@
             <enum name="smooth" value="1" />
         </attr>
         <attr name="bvp_indicator_gravity" format="enum">
-            <enum name="normal" value="0" />
-            <enum name="smooth" value="1" />
+            <enum name="center" value="0" />
+            <enum name="start" value="1" />
+            <enum name="end" value="2" />
         </attr>
         <attr name="bvp_page_style" format="enum">
             <enum name="normal" value="0" />
             <enum name="multi_page" value="1" />
+            <enum name="multi_page_overlap" value="2" />
+            <enum name="multi_page_scale" value="3" />
         </attr>
         <attr name="bvp_transformer_style" format="enum">
             <enum name="normal" value="0" />
@@ -32,8 +40,12 @@
             <enum name="accordion" value="3" />
         </attr>
 
-        <attr name="bvp_page_margin" format="dimension" />
-        <attr name="bvp_reveal_width" format="dimension" />
+        <attr name="bvp_indicator_visibility" format="enum">
+            <enum name="visible" value="0" />
+            <enum name="invisible" value="4" />
+            <enum name="gone" value="8" />/>
+        </attr>
+
     </declare-styleable>
 
 </resources>

BIN
download/app.apk